boost::shared_ptr引用计数所做的是求解tr1::shared_pt的原始指针
boost::shared_ptr reference counting does is solve raw pointer of tr1::shared_ptr
boost::shared_ptr
能解决原始指针问题吗?
Base* p = new Base();
shared_ptr <Base> sp(p);
shared_ptr <Base> sq(p);
两个shared_ptr
的引用计数都为1,所以原始指针是有问题的。
boost::shared_ptr
也有这个问题吗?
我听说boost::shared_ptr
没有问题,那么它是如何解决的呢?
boost::shared_ptr
不能解决这个问题。
问题出在你的代码中,所以你需要自己解决。
最佳解决方案是确保在使用new
:创建对象时始终立即初始化智能指针
shared_ptr <Base> sp(new Base());
现在没有原始指针,所以没有问题。
更好:
shared_ptr<Base> sp = make_shared<Base>();
你听错了。这对于boost或std shared_ptr
来说肯定不起作用。
所提供的是一个shared_from_this构造。您从一个基类继承,这个基类可以找到shared_ptr引用(并在您第一次采用指针时设置它)。然后你可以从一个原始指针中获得一个新的共享:
p->shared_from_this();
如果你这样称呼它,尽管它已经被一个共享指针采用了,或者它会做非常可怕的事情,并在所有尴尬的地方触动你。通过必须调用的create
函数而不是构造函数来强制执行它是很划算的。这样可以确保没有人创建一个不在shared_ptr
中的函数并调用该函数。
我真的很努力地避免不得不使用这种结构。如果你非常确定你的类型必须在共享所有权结构中,那么就让它使用侵入式指针。一个有原始指针问题的侵入式指针将是一件非常愚蠢的事情。。。我不知道有哪个能。你的代码可以和他们一起工作。
相关文章:
- 引用 std::shared:ptr 以避免引用计数
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 无法使用 libtool 将 -shared 参数传递给 g++
- 如何修复以下错误"no match for call to '(std::tr1::shared_ptr<_iobuf*>) (FILE*&)'"
- 链接 boost 库时"Error while loading shared libraries"引发的,除了我无法使用 root 访问权限来修复它
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- gcc -fPIC vs. -shared
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- TR1提供的所有东西现在都可以在C++14中使用并且易于使用吗
- Mac C++ 编译器找不到 <TR1/unordered_map>
- "directory containing symbolic versions of my app's shared libraries"的位置(ndk-stack)
- std :: tr1 :: shared_ptr throw bad_alloc,也是一个好主意
- 对 TR1 使用 boost 时提升数学特殊函数编译错误
- std::tr1::函数和它接受的模板值
- Qt自定义插件无法加载 - "Shared Library Not Found"
- TR1::绑定和通过引用传递,这种行为真的是预期的吗?
- 用TR1 :: Shared_ptr类型实现std ::相等
- C++, TR1, Regex and Boost
- c value_type对于std :: tr1不起作用:std :: map中的元组
- QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared