【发布时间】:2019-04-17 18:12:33
【问题描述】:
我正在尝试为具有以下字段的“表”类创建一个复制构造函数:
private:
int id ;
int capacity;
bool open;
std::vector<Customer*> customersList;
std::vector<OrderPair> orderList;
我想对所有字段进行深拷贝,并且我编写了以下代码,但我不确定是否对 customersList 进行了深拷贝,因为它是一个指针向量。有人能告诉我我是抄得深还是浅?提前谢谢你。
代码:
Table(const Table& t): capacity(t.getCapacity()), open(t.isOpen()), id(t.getId()){
std::vector<Customer*> tmp(t.customersList);
customersList = tmp;
}
或者也许我过度复制了,我应该只这样做? :
Table(const Table& t): customersList(t.customersList), capacity(t.getCapacity()),
open(t.isOpen()), id(t.getId()){}
再次感谢!
【问题讨论】:
-
如果您必须使用
std::vectors 共享“有效负载”的对象,我强烈建议使用std::shared_ptr而不是原始指针。这将使您的生活(尤其是共享实例)更轻松。复制std::vector将复制其元素 - 在您的情况下为原始指针。如果您没有在代码中明确执行此操作,它不会复制指针(指向的对象)。
标签: c++ c++11 pointers vector copy-constructor