C++ C+;中std::unique#ptr使Boost.Pointer容器过时+;11/14?
C++ C+;中std::unique#ptr使Boost.Pointer容器过时+;11/14?,c++,boost,c++11,stl,smart-pointers,C++,Boost,C++11,Stl,Smart Pointers,std::unique_ptr是否使Boost.Pointer容器在C++11/14中过时 在C++98/03中,没有移动语义,与原始指针相比,像shared_ptr这样的智能指针具有与引用计数相关的开销(ref计数块和联锁递增/递减)。因此,与std::vector相比,像std::vector这样的东西有开销 但是std::vector是否与std::vector(无参考计数开销)一样高效,并且在异常和自动销毁方面安全(即vector析构函数将自动调用T项的析构函数,其指针存储在vector
std::unique_ptr
是否使Boost.Pointer容器在C++11/14中过时
在C++98/03中,没有移动语义,与原始指针相比,像shared_ptr
这样的智能指针具有与引用计数相关的开销(ref计数块和联锁递增/递减)。因此,与std::vector
相比,像std::vector
这样的东西有开销
但是std::vector
是否与std::vector
(无参考计数开销)一样高效,并且在异常和自动销毁方面安全(即vector
析构函数将自动调用T
项的析构函数,其指针存储在vector
中)
如果是这样的话,Boost.Pointer容器在C++11/14代码中是否仍然有一个有效的有用的位置,还是它只是过时了?它不是obslete;它有一个完全不同的、更多的
直观的界面比
std::vector
更直观,正如James在回答中提到的,Boost.Pointer容器提供了一个比将独特的\u ptr
粘贴到标准库容器中更直观的界面
除此之外,
boost::ptr_vector
(和朋友们)将指向的类型存储为下面的void*
,这样就不会为每个t
都得到一个完整的类模板实例化
structfoo{
INTA;
};
矢量条;
将_向后推(使_唯一(1));
void*
提升也是一种“已知优化”,可以减少std::vector
的模板实例化,但是当前的libc++和libstdc++都不再使用这种优化。请参见@JonathanWakely。很久以前,但是……您能详细说明一下吗?
struct Foo {
int a;
};
vector<unique_ptr<Foo>> bar;
bar.push_back(make_unique<Foo>(1));
cout << bar[0]->a << endl; // rvalue, is ok
Foo *foo = bar[1].get(); // try to use a pointer, this interface "bar[1].get()" is awful