Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost smart_ptr非线程安全宏,它真的存在吗?_C++_Memory Management_Boost - Fatal编程技术网

C++ boost smart_ptr非线程安全宏,它真的存在吗?

C++ boost smart_ptr非线程安全宏,它真的存在吗?,c++,memory-management,boost,C++,Memory Management,Boost,我在一些stackoverflow问答中看到有人谈论boost宏(我想应该在编译时设置),以避免smart_ptr线程安全性。我一直在四处寻找,但没能找到它。有人能指出吗 另一方面,使用此宏将避免ref计数堆分配 提前谢谢。 如果您的程序是单线程的,并且没有链接到任何可能在默认配置中使用了shared_ptr的库,那么您可以在项目范围内定义宏BOOST_SP_DISABLE_THREADS,以切换到普通的非原子引用计数更新 如果您的程序是单线程的,并且没有链接到任何可能在默认配置中使用了sha

我在一些stackoverflow问答中看到有人谈论boost宏(我想应该在编译时设置),以避免smart_ptr线程安全性。我一直在四处寻找,但没能找到它。有人能指出吗

另一方面,使用此宏将避免ref计数堆分配

提前谢谢。

如果您的程序是单线程的,并且没有链接到任何可能在默认配置中使用了shared_ptr的库,那么您可以在项目范围内定义宏BOOST_SP_DISABLE_THREADS,以切换到普通的非原子引用计数更新

如果您的程序是单线程的,并且没有链接到任何可能在默认配置中使用了shared_ptr的库,那么您可以在项目范围内定义宏BOOST_SP_DISABLE_THREADS,以切换到普通的非原子引用计数更新


这显然是我的错。谢谢你的链接。另一方面,它是否仍然使用堆进行引用计数?@Notbad:考虑到您仍然可以传递
shared\u ptr
s,将它们存储在某处等,它必须使用堆。假设您调用了一个函数
shared\u ptr foo()
,那么您如何在堆栈上保留ref计数呢?引用的释放顺序也不取决于线程度。想象一下
Foo
Bar
一个
shared\u ptr
,然后
Foo
被杀死。再次感谢您的解释。我现在明白这是一个多么愚蠢的问题:)。这显然是我的错。谢谢你的链接。另一方面,它是否仍然使用堆进行引用计数?@Notbad:考虑到您仍然可以传递
shared\u ptr
s,将它们存储在某处等,它必须使用堆。假设您调用了一个函数
shared\u ptr foo()
,那么您如何在堆栈上保留ref计数呢?引用的释放顺序也不取决于线程度。想象一下
Foo
Bar
一个
shared\u ptr
,然后
Foo
被杀死。再次感谢您的解释。我现在明白这是一个多么愚蠢的问题:)。