试图在没有智能指针的情况下使用STL - 试图避免临时对象创建

Ste*_* Lu 0 c++ boost stl

我特别喜欢以简单方式使用STL容器的简单性.

我从来没有真正弄清楚如何让Boost库在我的开发平台上运行,事实上我认为我甚至都没有尝试过.我猜你可以说我只是试图推迟不可避免的事情,因为Boost显然是一个我应该使用的有用的库.

但我的问题与本主题基本相同:如何使用类初始化STL向量/列表而不调用复制构造函数

我有std::list<ExpensiveClass> mylist;,我只想要一个函数将一个新实例推入列表并调用默认构造函数,而不是从它的临时堆栈实例中复制它.在另一个主题中提到了移动构造函数.我看了他们,坦率地说,除了恐惧之外什么都没有.两个&符号!

如果我只创建一个ExpensiveClass对象数组,它会工作吗?ExpensiveClass *mylist = new ExpensiveClass[20];这会调用构造函数20次吗?

在我看来我应该使用boost:ptr_list.

Jam*_*lis 7

将对象插入容器会调用该对象上的复制构造函数.实际上还没有办法解决这个问题,因此为什么指针容器用于大型对象:复制指针要便宜得多.

如果您选择使用智能指针容器,您可以使用其中一个Boost指针容器,也可以使用shared_ptrs的STL容器.

回答你的问题:

ExpensiveClass *mylist = new ExpensiveClass[20];
Run Code Online (Sandbox Code Playgroud)

默认构造函数ExpensiveClass被调用20次:对于数组的每个元素一次.