C++ boost smart_ptr非线程安全宏,它真的存在吗?
我在一些stackoverflow问答中看到有人谈论boost宏(我想应该在编译时设置),以避免smart_ptr线程安全性。我一直在四处寻找,但没能找到它。有人能指出吗 另一方面,使用此宏将避免ref计数堆分配 提前谢谢。 如果您的程序是单线程的,并且没有链接到任何可能在默认配置中使用了shared_ptr的库,那么您可以在项目范围内定义宏BOOST_SP_DISABLE_THREADS,以切换到普通的非原子引用计数更新 如果您的程序是单线程的,并且没有链接到任何可能在默认配置中使用了shared_ptr的库,那么您可以在项目范围内定义宏BOOST_SP_DISABLE_THREADS,以切换到普通的非原子引用计数更新C++ boost smart_ptr非线程安全宏,它真的存在吗?,c++,memory-management,boost,C++,Memory Management,Boost,我在一些stackoverflow问答中看到有人谈论boost宏(我想应该在编译时设置),以避免smart_ptr线程安全性。我一直在四处寻找,但没能找到它。有人能指出吗 另一方面,使用此宏将避免ref计数堆分配 提前谢谢。 如果您的程序是单线程的,并且没有链接到任何可能在默认配置中使用了shared_ptr的库,那么您可以在项目范围内定义宏BOOST_SP_DISABLE_THREADS,以切换到普通的非原子引用计数更新 如果您的程序是单线程的,并且没有链接到任何可能在默认配置中使用了sha
这显然是我的错。谢谢你的链接。另一方面,它是否仍然使用堆进行引用计数?@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
被杀死。再次感谢您的解释。我现在明白这是一个多么愚蠢的问题:)。