Questions tagged «shared-ptr»

引用计数的实现共享所有权的智能指针类


8
C ++中make_shared和常规shared_ptr的区别
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo")); 关于此的许多google和stackoverflow帖子,但是我不明白为什么make_shared比直接使用效率更高shared_ptr。 有人可以一步一步地说明我创建的对象和它们所完成的操作的顺序,以便使我能够理解make_shared效率。我在上面给出了一个例子供参考。
276 c++  c++11  shared-ptr 

10
我们应该按引用还是按值传递shared_ptr?
当一个函数接受一个shared_ptr(来自boost或C ++ 11 STL)时,是否要传递它: 通过const参考: void foo(const shared_ptr<T>& p) 或值:void foo(shared_ptr<T> p)? 我更喜欢第一种方法,因为我怀疑它会更快。但这真的值得吗?还是有其他问题? 请问您提供选择的理由,或者如果是这种情况,请说明原因。
269 c++  c++11  boost  shared-ptr 


16
如何在仅具有受保护或私有构造函数的类上调用:: std :: make_shared?
我的这段代码行不通,但我认为目的很明确: testmakeshared.cpp #include <memory> class A { public: static ::std::shared_ptr<A> create() { return ::std::make_shared<A>(); } protected: A() {} A(const A &) = delete; const A &operator =(const A &) = delete; }; ::std::shared_ptr<A> foo() { return A::create(); } 但是在编译时会出现此错误: g++ -std=c++0x -march=native -mtune=native -O3 -Wall testmakeshared.cpp In file included from …
187 c++  c++11  shared-ptr 

2
shared_ptr到数组:应该使用它吗?
只是有关的一个小查询shared_ptr。 使用shared_ptr指向数组的好习惯吗?例如, shared_ptr<int> sp(new int[10]); 如果没有,那为什么不呢?我已经知道的一个原因是无法增加/减少shared_ptr。因此,它不能像指向数组的普通指针那样使用。
172 c++  c++11  shared-ptr 

2
为班级成员使用智能指针
我在理解智能指针在C ++ 11中作为类成员的用法时遇到了麻烦。我已经阅读了很多关于智能指针,我想我不知道如何unique_ptr和shared_ptr/ weak_ptr做工一般。我不明白的是真正的用法。似乎每个人都建议将其unique_ptr作为几乎所有时间都使用的方式。但是我将如何实现这样的事情: class Device { }; class Settings { Device *device; public: Settings(Device *device) { this->device = device; } Device *getDevice() { return device; } }; int main() { Device *device = new Device(); Settings settings(device); // ... Device *myDevice = settings.getDevice(); // do something with myDevice... } …

6
我为什么要std :: move一个std :: shared_ptr?
我一直在浏览Clang源代码,发现以下代码段: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } 我为什么要std::move一个std::shared_ptr? 在共享资源上转移所有权有什么意义吗? 我为什么不这样做呢? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }

6
为什么std :: shared_ptr <void>工作
我发现一些代码使用std :: shared_ptr在关机时执行任意清理。起初,我认为此代码可能无法工作,但随后尝试了以下操作: #include &lt;memory&gt; #include &lt;iostream&gt; #include &lt;vector&gt; class test { public: test() { std::cout &lt;&lt; "Test created" &lt;&lt; std::endl; } ~test() { std::cout &lt;&lt; "Test destroyed" &lt;&lt; std::endl; } }; int main() { std::cout &lt;&lt; "At begin of main.\ncreating std::vector&lt;std::shared_ptr&lt;void&gt;&gt;" &lt;&lt; std::endl; std::vector&lt;std::shared_ptr&lt;void&gt;&gt; v; { std::cout &lt;&lt; "Creating …
129 c++  c++11  shared-ptr 

17
C ++-传递对std :: shared_ptr或boost :: shared_ptr的引用
如果我有一个需要使用的函数shared_ptr,将其传递给它引用不是更有效(这样可以避免复制shared_ptr对象)?可能的不良副作用是什么?我设想了两种可能的情况: 1)在函数内部复制参数,例如 ClassA::take_copy_of_sp(boost::shared_ptr&lt;foo&gt; &amp;sp) { ... m_sp_member=sp; //This will copy the object, incrementing refcount ... } 2)在函数内部仅使用参数,例如 Class::only_work_with_sp(boost::shared_ptr&lt;foo&gt; &amp;sp) //Again, no copy here { ... sp-&gt;do_something(); ... } 在两种情况下,我都看不出有理由boost::shared_ptr&lt;foo&gt;按值传递而不是按引用传递。传递值只会由于复制而“临时”增加引用计数,然后在退出功能范围时减少引用计数。我在俯视什么吗? 为了澄清,在阅读了几个答案之后:我完全同意过早优化的问题,并且我总是尝试先介绍热点,然后再进行热点工作。如果您知道我的意思,我的问题更多是从纯粹的技术代码角度来看。

4
`const shared_ptr <T>`和`shared_ptr <const T>`之间的区别?
我正在为C ++中的共享指针编写访问器方法,该方法如下所示: class Foo { public: return_type getBar() const { return m_bar; } private: boost::shared_ptr&lt;Bar&gt; m_bar; } 因此,要支持getBar()return类型的常量性,应boost::shared_ptr防止Bar它指向的修改。我的猜测是shared_ptr&lt;const Bar&gt;要返回该类型的类型,而const shared_ptr&lt;Bar&gt;这将防止指针本身重新分配以指向不同的对象,Bar但允许Bar对其指向的对象进行修改。但是,我不确定。如果知道的人可以确认这一点,或者如果我弄错了,请更正我,我将不胜感激。谢谢!
115 c++  boost  const  shared-ptr 

3
std :: shared_ptr线程安全说明
我正在阅读http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html,但是对于我来说,一些线程安全性问题仍然不清楚: 标准保证引用计数是线程安全处理的,并且与平台无关,对吗? 相似的问题-标准保证只有一个线程(持有最后一个引用)会在共享库上调用delete,对吗? shared_ptr不能保证存储在其中的对象有任何线程安全吗? 编辑: 伪代码: // Thread I shared_ptr&lt;A&gt; a (new A (1)); // Thread II shared_ptr&lt;A&gt; b (a); // Thread III shared_ptr&lt;A&gt; c (a); // Thread IV shared_ptr&lt;A&gt; d (a); d.reset (new A (10)); 在线程IV中调用reset()会删除在第一个线程中创建的A类的先前实例,并将其替换为新实例吗?此外,在IV线程中调用reset()之后,其他线程将仅看到新创建的对象吗?
106 c++  c++11  shared-ptr 

4
shared_ptr在哪里?
几个小时后试图找到shared_ptr的位置后,我现在感到非常沮丧。我看到的所有示例都没有显示完整的代码来包含shared_ptr(和正在运行的)标题。简单的声明std,tr1并&lt;memory&gt;在一切都没有帮助!我已经下载了增强功能,但仍然没有显示!有人可以告诉我在哪里可以找到我吗? 感谢您让我发泄挫败感! 编辑:我看到我的标题已更改。对于那个很抱歉。所以...这也是因为我不清楚shared_ptr是否“依赖C ++版本”-&gt;这就是为什么我没有声明我的环境-&gt;因此可能为什么我很难找到它。 我正在使用MSVS2008。 编辑2:我不知道为什么,但是当我到处寻找shared_ptr时,我包括了[memory]和[boost / tr1 / memory.hpp]和[boost / tr1 / tr1 / memory]。没错 感谢您的所有回复。

2
此的std :: shared_ptr
我目前正在尝试学习如何使用智能指针。但是,在进行一些实验时,我发现以下情况,无法找到令人满意的解决方案: 假设您有一个类A的对象是类B(孩子)的对象的父对象,但两者应该彼此了解: class A; class B; class A { public: void addChild(std::shared_ptr&lt;B&gt; child) { children-&gt;push_back(child); // How to do pass the pointer correctly? // child-&gt;setParent(this); // wrong // ^^^^ } private: std::list&lt;std::shared_ptr&lt;B&gt;&gt; children; }; class B { public: setParent(std::shared_ptr&lt;A&gt; parent) { this-&gt;parent = parent; }; private: std::shared_ptr&lt;A&gt; parent; }; 问题是,类A的对象如何std::shared_ptr将自身(this)的a传递给它的子对象? …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.