smart-pointers相关内容
当我使用 deleter 创建 unique_ptr 时,它会起作用: std :: unique_ptr *)> ptr(new Animal * ls){ delete ls; }); 但是,此代码抛出错误: std ::
..
想象一下,您有一个 unique_ptr ,其中有一个由引用存储的自定义删除器: struct CountingDeleter { void operator()(std :: string * p){ ++ cntr_; 删除p; } 无符号长cntr_ = 0; }; int main() { CountingDeleter d1 {},d2 {};
..
我需要处理两个结构 addrinfo 指针。由于我使用C ++(11)进行编码,因此必须使我的代码具有异常安全性。确实,我的构造函数可能会抛出 runtime_error 。 当您不再需要这种结构时,应调用 freeaddrinfo 以便释放结构中的列表。请考虑以下代码: #include #include class SomeOther
..
我正在尝试使用智能指针将COM对象保留在我的班级中,同时避免使用ComPtr。 我对智能指针还是很陌生,到目前为止,我有点困惑。请考虑以下简化代码: class Texture { private: struct ComDeleter { operator()(IUnknown * p) { p.Release(); 删除p; } } ID3D11Te
..
我从库中获得了这些普通的C函数: struct SAlloc; SAlloc * new_salloc(); void free_salloc(SAlloc * s); 有什么方法可以用C ++将其包装到智能指针(std :: unique_ptr),还是RAII包装器? 我主要是对标准库的可能性感到好奇,而没有创建自己的包装器/类。 解决方案
..
好吧,所以每个人都知道应该避免像瘟疫一样避免使用原始指针,而应该使用智能指针,但是这种建议在实现容器时是否适用?这是我要完成的工作: template class AVLTreeNode { public: T数据; unique_ptr左右; int高度; } Unique_ptr可以使容器函数
..
首先看看C ++ Primer关于 unique_ptr 和 shared_ptr 的内容: 16.1.6美元。效率和灵活性 我们可以确定 shared_ptr 不成立将该删除器作为直接成员,因为该删除器的类型直到运行时才知道。 因为该删除器的类型是 unique_ptr ,删除成员的类型在编译时是已知的。 删除程序可以直接存储在每个 unique_ptr 对象中。 因此,
..
我一直在努力防止用户使用没有智能指针的类。因此,强制它们具有由智能指针分配和管理的对象堆。 为了获得这样的结果,我尝试了以下操作: #include< ; memory> class A { private: 〜A {} // //仅在std :: unique_ptr 朋友std ::强制使用A default_delete
..
我写了简单的代码来帮助我理解智能指针: string s =“ str”; 向量>光伏; pv.push_back(unique_ptr(& s)); cout
..
因此,当使用 shared_ptr 时,您可以这样写: shared_ptr var(new Type()); 我想知道为什么他们不允许更简单更好的(imo): shared_ptr var = new Type(); 要实现此功能,您需要使用 .reset(): shared_ptr
..
假设我有一个FooContainer类,该类聚集了Foo类型的unique_ptr对象。 #include #include 类FooContainer { 受保护: std :: vector许多; //其他属性 public: FooCoontainer(const FooCo
..
通常,我更喜欢从工厂返回 unique_ptr 。 最近,我遇到了一个问题,即为继承 enable_shared_from_this 的类返回 unique_ptr 。此类的用户可能会意外地调用 shared_from_this(),尽管该调用不属于任何 shared_ptr ,结果带有 std :: bad_weak_ptr 异常(或直到C ++ 17之前未定义的行为,通常作为异常来实现)。
..
具有通常的基础->派生层次结构,例如: 类Fruit {...}; 类梨:水果{...}; 类番茄:水果{...}; std :: vector m_fruits; 使用 emplace_back 而不是 push_back ? std :: vector :: emplace_back(new Pear( )); std :: vec
..
我无法理解C ++ 11中智能指针作为类成员的用法。我已经阅读了很多有关智能指针的文章,我想我确实理解 unique_ptr 和 shared_ptr / weak_ptr 通常可以正常工作。我不了解实际用途。似乎每个人都建议使用 unique_ptr 作为几乎所有时间的方式。但是我将如何实现这样的东西: class Device { }; 类别设置{ Device * devic
..
在我的方法中,创建了一个Player对象,如下所示: Player player(fullName,age); 我的老师给了我们一段代码,其中包含一个将shared_ptr用作播放器对象的构造函数。 / p> // 类的构造函数SomeClass(const std :: shared_ptr客户端,std :: shared_ptr
..
我只是知道 std :: enable_shared_from_this 表单此链接。 但是阅读下面的代码后,我不知道何时使用它。 尝试{ 好not_so_good; std :: shared_ptr gp1 = not_so_good.getptr(); } catch(std :: bad_weak_ptr& e){ //未定义行为(直到C ++ 17)
..
要解决我的应用程序中一个非常特殊的问题,我需要一个共享指针来分配数据,但对于外部世界,底层数据类型应保持隐藏。 我可以通过创建某种我所有其他类都可以继承的Root类来解决此问题,并在此Root类上使用shared_ptr,如下所示: std :: shared_ptr 但是: 我不希望我的所有类都可以从这个Root类继承而来,只是要具有
..
从C ++ 11开始,由于多种原因,开发人员倾向于将智能指针类用于动态生命周期对象。对于这些新的智能指针类,标准甚至建议不要使用 new 这样的运算符,而是建议使用 make_shared 或 make_unique 可以避免某些错误。 如果我们想使用智能指针类,例如 shared_ptr ,我们可以构造一个类似的 shared_ptr p(新int(12));
..
理论上,我应该能够使用自定义指针类型和删除器,以便让 unique_ptr 管理不是指针的对象。我尝试了以下代码: #ifndef UNIQUE_FD_H #define UNIQUE_FD_H #include #include struct unique_fd_deleter { typedef int指针; //内部类型是一个
..
这个问题确实适合标题:我很好奇,知道造成这种差异的技术原因是什么,还有原理? std :: shared_ptr sharedToVoid; //合法; std :: unique_ptr uniqueToVoid; //格式错误; 解决方案 这是因为 std: :shared_ptr 实现类型擦除,而 std :: unique_ptr 不
..