我想制作一个容器来管理大对象,这些对象在复制构造和复制分配上执行深复制。
template <class TBigObject>
class Container : public std::vector< std::shared_ptr<TBigObject> >
{
public:
Container(int nToAllocate){ /* fill with default constructed TBigObjects */ }
Container(const Container& other){ /* deep copy */ }
Container(Container&&) = default;
Container& operator = (const Container& population){ /* deep copy */ }
Container& operator = (Container&&) = default;
};
我想知道默认值是什么:
Container(Container&&) = default;
Container& operator = (Container&&) = default;
成员实际上是这样做的。
如果我打电话:
Container<int> makeContainer()
{
...
}
并在以下位置设置调试断点:
Container<int> moveAssigned;
moveAssigned = makeContainer(); // EDIT corrected thanks to Andy Prowl
Container<int> moveConstructed(makeContainer());
在复制构造函数和赋值运算符中,调试器会跳过这些断点。所以看起来默认的移动成员实际上并不执行深拷贝并移动所有子对象。
标准是否保证了这种行为?默认移动成员的行为是否直观并移动所有子对象?