【发布时间】:2021-04-18 05:28:04
【问题描述】:
我有这样的课:
class Bla {
private:
size_t length;
ComplexClass expensiveData; // Very expensive, and Bla manages everything about someStuff, including its creation and deletion
};
现在假设我想做这样的事情:
Bla a = ...;
Bla b = ...;
a = b;
现在我认为会发生的是,当我将a 分配给b 时,将调用复制分配运算符。
问题是,如果我要深度复制a 和b 的内容,那将是非常昂贵的。最好总是只做一个Bla 的浅拷贝。然而,问题在于expensiveData 是一个常规值,而不是一个指针,这意味着如果我尝试将expensiveData 重新分配给一个新对象,它只会复制它。
另外,expensiveData 由我使用的其中一个库提供,我无法更改它的工作方式。
我应该要么:
- 删除复制赋值和复制构造操作符,因为我从不想做任何深拷贝,但随后就失去了赋值的能力。
- 将
expensiveData更改为指针,然后在复制构造函数中重新分配指针。 - 使用其他方法,例如
std::move或std::swap?
【问题讨论】:
-
expensiveData的实际确切类型是什么?是什么让复制变得昂贵? (edit您的问题包括此信息,而不是在评论中回复。) -
expensiveData是我从我提供的一个库中使用的某种树形结构(我无法更改它的工作方式)。
标签: c++ memory-management