问题标签 [shared-ptr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 删除共享指针
我有一个指向 a 的指针QScriptEngine
,我正在通过 class 的重载类构造函数Evaluator
并将其分配给QScriptEngine *engine_
(类Property
子类Evaluator
,并调用此构造函数Evaluator
,将其传递给已分配的QScriptEngine
)。不带参数的构造函数创建新QScriptEngine
指针(以这种方式创建Generic
子类Evaluator
)。engine_
在我测试 if is not的析构函数中NULL
,删除指针,然后分配它NULL
。engine_
现在派生的指针 ( )Property
也应该是NULL
? 有些东西告诉我事实并非如此。如果没有,您如何处理这种情况?我需要QScriptEngine
始终是同一个实例。QScriptEngine
's = 运算符是私有的,否则我会一起避免指针。
我在另一个 SO question 中看到了一些关于共享指针(boost::shared_ptr
和)的信息。std:tr1::shared_ptr
我已经在正则表达式库中使用了 boost,所以如果这是处理这个问题的最佳方法,boost 并不是不可能的。对于一般 C++ 知识和未来的项目,希望有一种非提升方式。
c++ - shared_ptr 与模板
如果我想创建一个指向 struct 的智能指针,我会这样做:
所以,我可以写以下内容:
但是,如果我有这样的模板结构:
我想写以下内容:
那么,我应该如何声明 B_Ptr ?
c++ - 多态性和指针向量的c ++问题
考虑以下示例代码:
我目前的项目中有这样的问题。客户端代码使用BarCollection
,它存储指向Bars
在d_foos
其中声明的指针FooCollection
。我现在想将指向 Bars 的指针集合公开给客户端代码。我可以让客户端代码访问指向Foo
s 的指针向量并将它们转换为Bar
客户端代码中指向 s 的指针,但这感觉不对,因为客户端不必知道Foo
' 的存在。
我还可以定义一个get()
成员来从中检索对象d_foos
并对其进行强制转换,但这感觉很笨拙。最好,我只想将 d_foos 作为 a 返回vector<shared_ptr<Bar> > &
,但我似乎无法做到这一点。
也可能是我的设计完全错误。不过,这似乎是最自然的解决方案,因为Bar
它是专业化的,Foo
并且BarCollection
是专业化的,FooCollection
并且它们共享功能。
您能否提出很好的解决方案来实施getBars
或BarCollection
更好的设计替代方案?
编辑:
原来我的设计确实很糟糕。BarCollection 不是 FooCollection,尽管它需要 FooCollection 的所有功能。我目前基于以下答案的解决方案 - 这更清洁 - 现在是:
感谢所有优秀的建议和例子!
c++ - shared_ptr 与 scoped_ptr
scoped_ptr
不可复制,正在从范围中删除。所以它是一种限制shared_ptr
。因此,除了确实需要限制复制操作的情况外,似乎shared_ptr
更好用。因为有时您不知道是否需要创建对象的副本。所以问题是:除了上面提到的情况外,我们是否可以认为shared_ptr
更好(或推荐)使用而不是scoped_ptr
. 是否scoped_ptr
工作得更快shared_ptr
,或者它有什么优势?
谢谢!
c++ - std::list of boost::shared_ptr 的迭代器问题
我在使用以下代码时遇到问题:
gcc (4.2.1) 告诉我:
我想知道为什么我不能为 MessagePointer 的列表创建迭代器。
有任何想法吗?
谢谢你。
c++ - 如何使用 shared_ptr 避免内存泄漏?
考虑以下代码。
没有输出。没有调用析构函数。内存泄漏。我一直认为智能指针有助于避免内存泄漏。
如果我需要在类中进行交叉引用,我应该怎么做?
c++ - 从 shared_ptr 中分离一个指针?
我的接口的一个函数返回一个指向对象的指针。用户应该拥有该对象的所有权。我不想返回 Boost.shared_ptr,因为我不想强迫客户使用 boost。但是,在内部,我想将指针存储在 shared_ptr 中,以防止出现异常等情况下的内存泄漏。似乎没有办法将指针与共享指针分离。这里有什么想法吗?
boost - 常量 shared_ptr 到 shared_ptr
如何将指向 const 对象的 shared_ptr 转换为指向非 const 对象的 shared_ptr 。我正在尝试执行以下操作:
但它不起作用。
c++ - shared_ptr、订阅、析构函数
我在整个应用程序中使用 Boost/shared_ptr 指针。当对对象的最后一个引用被释放时,shared_ptr 将为我删除该对象。应用程序中的对象订阅应用程序中心位置的事件,类似于观察者/订阅者模式。
在对象析构函数中,对象将从订阅列表中取消订阅。订阅列表本质上只是一个list<weak_ptr<MyObject> >
. 我想做的是与此类似的事情:
我的问题是不能在析构函数中调用 shared_from_this ,所以上面的代码会抛出异常。
在我的旧实现中,订阅列表只是一个指针列表,然后它就起作用了。但我想改用weak_ptr 引用来降低我通过手动内存管理搞砸内存的风险。
由于我依赖 shared_ptr 来执行对象删除,因此我的代码中没有一个地方可以逻辑地调用 Unsubscribe。
关于在这种情况下该怎么做的任何想法?
c++ - C++:auto_ptr + 前向声明?
我有这样的课:
在 .cpp 中,构造函数创建一个Inner
with实例,new
析构函数创建delete
它。这工作得很好。
现在我想更改此代码以使用auto_ptr
,所以我写:
现在,构造函数初始化了auto_ptr
,析构函数什么也不做。
但它不起作用。当我实例化这个类时,问题似乎出现了。我收到这个警告:
警告 C4150:删除指向不完整类型“内部”的指针;没有调用析构函数
好吧,这显然很糟糕,我理解它为什么会发生,编译器不知道Inner
实例化模板时的 d'torauto_ptr<Inner>
所以我的问题是:有没有办法auto_ptr
像我在只使用普通指针的版本中那样使用前向声明?
必须对#include
我声明的每个类都声明一个指针是一个巨大的麻烦,有时甚至是不可能的。这个问题一般是怎么处理的?