我的问题是基本问题。由于std::string
是数组,我是否在我的复制构造函数中正确处理它们?
class json{
private:
std::string _objectContents;
std::string _regComments;
bool _isJson;
int numElements;
public:
json(const json&);
...
};
json::json(const json& source){
_objectContents = source._objectContents;
_regComments = source._regComments;
_isJson = source._isJson;
_numElements = source.numElements;
}
*编辑删除指针并更改为有问题的数组。
答案 0 :(得分:3)
我设置我的std :: strings正确
您设置正确但可能更好。
您不需要明确定义的复制构造函数。编译器生成的那个将为您拥有的成员变量做正确的事。
如果必须显式定义复制构造函数,请使用初始化列表初始化成员。将实施更改为:
json::json(const json& source) :
_objectContents(source._objectContents),
_regComments(source._regComments),
_isJson(source._isJson),
_numElements(source.numElements)
{
}
答案 1 :(得分:2)
字符串赋值运算符隐式地将基础字符数组从源字符串复制(或移动)到目标字符串(深层副本),而不是仅复制它们的指针(浅层副本)。
所以是你的代码是正确的。
由于可以使用赋值运算符复制所有成员变量,因此无需显式声明复制构造函数
虽然你需要一个复制构造函数,但是你使用了C样式字符串。在这种情况下,默认的复制构造函数会执行浅拷贝,而您可能打算进行深层复制。