两年多以前,Stephan T. Lavavej described a space-saving optimization他在Microsoft的std::make_shared
实现中实现了,我从与他交谈时得知微软对采用这种优化的其他库实现没有任何反对意见。如果您确定其他库(例如,对于Gnu C ++,Clang,Intel C ++,加上Boost(对于boost::make_shared
))是否已采用此实现,请提供答案。我没有准备好访问那么多的make_shared
实现,也不是在考虑如果他们已经实现了WKWYL优化,我还要考虑其中的内容,但是我希望SO读者知道一些图书馆的答案。我从查看Boost 1.52的代码中了解到,WKWYL优化尚未实现,但Boost现在已达到1.55版本。
请注意,此优化与std::make_shared
避免std::shared_ptr
使用的引用计数的专用堆分配的能力不同。有关WKWYL与优化之间差异的讨论,请参阅this question。
答案 0 :(得分:5)
libc ++似乎实现了优化。请参阅http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/memory?revision=210211&view=markup中__shared_ptr_pointer
和__shared_ptr_emplace
之间的区别。
libstdc ++似乎也实现了它。请参阅https://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/include/bits/shared_ptr_base.h?revision=210015&view=markup中_Sp_counted_ptr
和_Sp_counted_ptr_inplace
之间的区别。