这是一个两部分问题,所有关于原子性std::shared_ptr
:
1.
据我所知,std::shared_ptr
是唯一的智能指针<memory>
这就是原子.我想知道是否有非原子版本std::shared_ptr
可用(我看不到任何内容<memory>
,所以我也接受标准之外的建议,比如Boost中的建议).我知道boost::shared_ptr
也是原子的(如果BOOST_SP_DISABLE_THREADS
没有定义),但也许有另一种选择?我正在寻找具有相同语义std::shared_ptr
但没有原子性的东西.
2.我明白为什么std::shared_ptr
是原子的; 这有点好.然而,对于每种情况来说都不是很好,而且C++历来有"只为你使用的东西买单"的口号.如果我没有使用多个线程,或者我使用多个线程但是没有跨线程共享指针所有权,则原子智能指针是过度的.我的第二个问题是为什么不是std::shared_ptr
C++ 11 中提供的非原子版本?(假设有一个原因)(如果答案是简单的"非原子版本根本不会考虑"或"从来没有人问非原子版"这很好!).
对于问题#2,我想知道是否有人提出过非原子版shared_ptr
(无论是对Boost还是标准委员会)(不是替换原子版本shared_ptr
,而是与它共存)并且它被击落了具体原因.
使用c ++ 11中包含的shared_ptr,可以实现半垃圾收集环境.(通货膨胀?)用法是否带来一些缺点?
我可以想象一个类模型,在这里你可以创建一个类,在这个类中你最后输入你的类作为shared_ptr来缩写语法.
/////////////////
//// MyClass ////
/////////////////
#include <memory>
class MyClass {
public:
Myclass();
};
typedef std::shared_ptr<MyClass> SharedMyClass;
///////////////////////
//// Example Class ////
///////////////////////
class Example {
public:
Example(): myClassObject(new MyClass()) {}
private:
SharedMyClass myClassObject;
};
Run Code Online (Sandbox Code Playgroud)