我是智能指针的新手,如果有人可以提示我作为类成员处理智能指针的方式是否正确,我将不胜感激。更准确地说,我想要实现的解决方案是在类多态性的上下文中,理想情况下应该是异常安全的。给定一个containerofheterogeneuousobjects(std::vector>my_vector),通常添加元素的方式是:my_vector.push_back(shared_ptr(newCChild(1))),以便稍后可以通过以下方式调用特定派生类的成员函数:my_vector[0]->doSomething().我想要实现的是将堆栈对象添加到vector并且仍然能够进行多态性。直觉上……喜
我知道这个问题很长,但我不确定如何用更短的方式解释我的问题。问题本身是关于类层次结构的设计,尤其是如何将基于指针的现有层次结构移植到使用智能指针的层次结构中。如果有人能想出一些方法来简化我的解释,从而使这个问题更通用,请告诉我。这样,它可能对更多SO读者有用。我正在设计一个C++应用程序来处理一个允许我读取一些传感器的系统。该系统由我收集测量值的远程机器组成。此应用程序实际上必须使用两个不同的子系统:聚合系统:这种类型的系统包含我收集测量值的几个组件。所有通信都通过聚合系统,如果需要,聚合系统会将数据重定向到特定组件(发送到聚合系统本身的全局命令不需要传输到单个组件)。独立系统:在这种
我正在尝试使用智能指针在我的类中保存COM对象,同时避免使用ComPtr。是否可以为此目的使用unique_ptr?我对智能指针很陌生,到目前为止我有点困惑。请考虑以下简化代码:classTexture{private:structComDeleter{operator()(IUnknown*p){p.Release();deletep;}}ID3D11Texture*m_dumbTexture;std::unique_ptrm_smartTexture;public:ID3D11Texture*getDumbTexture()const{returnm_dumbTexture;}ID
通常我更喜欢从工厂返回unique_ptr。最近我遇到了为继承enable_shared_from_this的类返回unique_ptr的问题。此类的用户可能会意外调用shared_from_this(),尽管它不属于任何shared_ptr,这会导致std::bad_weak_ptr异常(或C++17之前的未定义行为,通常作为异常实现)。代码的简单版本:classFoo:publicenable_shared_from_this{stringname;Foo(conststring&_name):name(_name){}public:staticunique_ptrcreate(c
我有一个使用enable_shared_from_this的ViewController基类classViewController:publicstd::enable_shared_from_this{//...};和一个child:classGalleryViewController:publicViewController{voidupdateGallery(floatdelta);}问题出现了,当我尝试将我当前的实例传递给第3方时(比如lambda函数被安排在某处)实例(GalleryViewController)会释放一个(罕见的)条件,所以我不能直接捕获“this”,我需要用
两个客户端在消息层之上相互通信在消息正文中,我需要包含一个指向任何数据类型的字段我从客户端A发送字段为shared_ptr到消息层。我将此字段定义为shared_ptr在消息层。但是我怎样才能将这个字段转换回shared_ptr在客户B中?或者我应该定义shared_ptr在消息层中作为其他东西?谢谢 最佳答案 如果您使用的是boost::shared_ptr,那么您可以使用各种XXX_ptr_cast()函数(static_ptr_cast、dynamic_ptr_cast...)。如果您使用的是MSVC2010版本,我无法找到这
我正在寻找一种减少C++项目中header耦合的简单方法,这主要是由于(过度使用的)类组合,这当然需要完整的类型。例如://headerAclassA{Bb;//requiresheaderB};我也考虑过接口(interface)和pimpl,但是它们都暗示了一些我不想手动编写/支持的样板代码(或者有没有使之自动的方法?)。因此,我考虑过用一个指针和一个类似于classB*pB;的转发替换成员,但这需要处理对象的创建和删除。好的,我可以使用智能指针进行删除(虽然不是auto_ptr,因为它在创建时需要完整的类型,所以要说类似shared_ptrpB;这样的东西),但是现在如何进行对象
我正在设计一个简单的Connect4游戏。到目前为止,我有4个底层类:Colour-负责表示颜色(RGBA)。包括转换运算符。Player-代表游戏玩家。每个Player有一个Colour和一个名字。Board-代表游戏板。它包含维度,以及Tile的二维vector。具有这些尺寸。Tile-Board中的嵌套类.代表板上的一个空间。每个Tile有一个Colour和一个std::unique_ptr给那block瓷砖的主人。所有者以nullptr开头并且可以一次更改为Player.颜色一开始是透明的黑色。我测试了我的Colour类,它似乎工作正常。我的Player类(class)也处于最
我正在考虑在我的qt工作中开始使用智能指针。让我感到困惑的是智能指针如何与Qt垃圾收集一起使用。整个Qt依赖于子QObject以QObject*parent作为ctor参数构造的习语,因此启用垃圾收集。例如:QWidget*mWidget=newQWidget(this);//Herewenotonly//ensurethatmWidgetwillbedeleted//whenitsparentisdeleted,butalsotellqt,//thatmWidgetisnotawindow,butbelongsto//parent'slayout现在,如果我想将mWidget包装到智
在处理类成员函数指针时,我们可以使用以下语法在对象实例上调用函数:structX{voidfoo();};Xx;//Instanceautof=&X::foo;//Memberfunctionpointer(x.*f)();//Callfunctionfonx当有一个实例的原始指针时,语法是这样的:X*xptr=newX();(xptr->*f)();这很好地遵循了静态函数调用的类比:x.foo();x->foo();但是,当我有类的智能指针时,这不起作用:unique_ptrxsptr(newX());(xsptr->*f)();//g++:error:nomatchfor'oper