shared-ptr相关内容
我有这段代码: class DLL_API MyClassWrapper { private: MyClass * m_myClass; public: MyClassWrapper(SIZE inputSize); 〜MyClassWrapper(); inline int OutputSize(); } typedef std :: shared_
..
我试图了解 shared_ptr p 在用于构建未命名 shared_ptr 及其对 p 的影响。我正在玩自己的示例,并编写了以下代码: shared_ptr p(新int(42)); cout(p); cout
..
我偶然发现了我正在使用的共享指针的意外行为。 共享指针实现引用计数和分离(例如 要实现此目的,对于每个getter函数,智能指针都具有 const 和非常量版本,例如: operator T *()和运算符T const *()const 。 问题:将指针值与进行比较nullptr 导致分离。 期望:我认为比较运算符将始终调用const版本。 简化示例: (此实
..
下面的三个注释行的执行顺序是否得到保证? 结构S { S(){/ *称为第一* /} 〜S(){/ *称为第三* /} }; boost :: shared_ptr f() { return boost :: shared_ptr S(new S); } int second(){返回0; / *称为第二* /} int test()
..
我有一个使用 boost :: shared_ptr s的程序,尤其是依赖于 use_count 执行优化。 例如,假设有一个带有两个称为lhs和rhs的参数指针的加法运算。假设它们都具有 shared_ptr 类型。是时候执行加法了,我将检查 use_count ,如果我发现其中一个参数的引用计数恰好是一个,那么我将重用它以执行适当的操作。如果两个参数都不能重用,则必须分配一
..
此答案引用了 N4082 ,表明即将对 std :: shared_ptr 进行的更改将同时允许 T [] 和 T [N] 变体: 不同于 unique_ptr 数组的部分专业化,两者 shared_ptr 和 shared_ptr 是有效的,并且两者都会导致 delete [] 被删除 template
..
在阅读RAII之后,查看 Herb Sutter的CppCon2014演示文稿,然后阅读核心指南和相关 文章几天来,我仍然对所有权和相关语义感到困惑。 假设类A和类B代表物理实体,并且有一个Scene类和一个Process类。如果愿意,Process类是一个 main 函数。在现实世界中,A可以获取B并实际保留它。它也可以释放它。因此,在Process实例的过程中,A对象必须能够拥有一个B实
..
可能重复: 如何从boost :: shared_ptr释放指针? 从shared_ptr删除指针? 我正在尝试发布shared_ptr(您可以发布unique_ptr的方式)。我知道,当shared_ptr不唯一时,这没有任何意义,但是我有一个shared_ptr,它保证是唯一的。我已经尝试过... m_pObj.reset((T *)nullptr,[](T * co
..
我必须为类编写一个共享的指针,它要做的许多其他事情就是确保它可以删除它指向的对象。 如何编写可与具有受保护的析构函数的对象一起使用的解决方案? 此外,如果对象是使用new放置创建的,则不应在对象上调用 delete ,因为该空间可能仍在使用中( delete 调用甚至可以工作吗?) 。如何检测到此类情况? 规范的相关位: void reset(); 智能指针设置为指向空指针
..
因此,我的理解是,当对象的最后一个剩余所有者被销毁或重新分配时,shared_ptr会自动从内存中取消分配(似乎太好了,难以置信吗?),当许多实例共享同一对象时,它很有用。是吗? 因此,在我的情况下,我正在制作2D平铺的世界,所以我要在屏幕上绘制许多相同的纹理。 我有 std :: map> Tiledb; 存储所
..
我注意到在QT中用shared_ptr替换原始指针时,我的代码不再起作用。 例如,如果不是 QTreeWidgetItem * vItem(new QTreeWidgetItem(ItemTitle)); 我使用 std :: shared_ptr vItem(新的QTreeWidgetItem(ItemTitle));
..
我正在尝试为我的软件定义一个好的设计,这意味着要谨慎地对某些变量进行读/写访问。在这里,我简化了讨论程序。希望这对其他人也有帮助。 :-) 假设我们有一个X类,如下所示: 类X { int x; public: X(int y):x(y){} void print()const {std :: cout
..
在我的图书馆中,我使用std:shared_ptr`s来保存我正在使用的通信对象。我有创建这些指针的模板函数。它返回原始指针,因此应用程序可以使用这些对象,而无需进行引用计数(严格的实时应用程序)。 template
..
我正在制作一个粒子系统,并且正在为如何构建代码而苦苦挣扎。这个想法是,用户可以创建一个或多个 ParticleEmitter 对象,这些对象通过 ParticleManager 对象c $ c> ofxCurlNoise 对象。 现在,我希望当用户更新 ParticleEmitters 对象时, ParticleManager 对象可以看到所做的更改。因此,我使用了共享指针,但是在不同的时间
..
考虑以下代码: class A:public std :: enable_shared_from_this { public: std :: shared_ptr f() { return shared_from_this(); } }; int main() { A a; std :: shared_ptr ptr = a.f();
..
我有一个 shared_ptr ,我可以通过它。最终,在某些情况下,我想将原始指针传递给一个函数,然后该函数成为内存所有者。在这些情况下, shared_ptr 不再负责释放内存,因为我调用的函数已拥有所有权。如何获得 shared_ptr 失去所有权? 我想拥有 shared_ptr 失去所有权是因为我想使用协议缓冲区的AddAllocated功能,该功能采用一个已分配
..
可能重复: 我想创建一个指向类的共享指针,并有一个工厂方法在返回时返回它保持构造函数\析构函数的保护。由于共享指针无法访问构造函数或析构函数,因此会出现编译器错误。 我正在使用llvm 4.1,但我正在寻找一种解决方案,可以 这是代码示例: class Foo { public: static std :: shared_ptr getSharedPo
..
如果我有一个带有自定义删除器的 std :: shared_ptr ,是否可以保证所有相关的弱指针都被删除器视为已过期? (如果您可以引用标准中的相关部分,将不胜感激。) 换句话说,下面的断言是否可以保证不会触发? std :: weak_ptr弱; std :: shared_ptr strong { new Foo, [& weak](
..
我想知道这个事实背后的原因是, std :: shared_ptr 没有定义 [] 数组运算符。特别是为什么 std :: unique_ptr 具有此运算符而不具有 std :: shared_ptr 的功能? 解决方案 std :: unique_ptr 仅定义 operator [] 在数组的特殊化中: std :: unique_ptr 。对于非数组指针,operat
..
采用普通的旧数据类型和对象作为成员的普通结构(或类)。注意,没有定义默认构造函数。 struct Foo { int x; int y; double z; string str; }; 现在,如果我在堆栈上声明实例f并尝试打印其内容: { Foo f; std :: cout
..