复制构造函数 - 我是否正确设置了我的 std::字符串
copy constructor - am I setting my std::strings correctly
我的问题是一个基本的问题。由于数组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;
}
*编辑了删除指针并更改为有问题的数组。
我是否设置了我的标准::字符串正确
您设置了正确的它们,但它可以更好。
-
不需要显式定义的复制构造函数。编译器生成的一个将为您拥有的成员变量做正确的事情。
-
如果必须显式定义复制构造函数,请使用初始化列表初始化成员。将实现更改为:
json::json(const json& source) : _objectContents(source._objectContents), _regComments(source._regComments), _isJson(source._isJson), _numElements(source.numElements) { }
字符串赋值运算符隐式复制(或移动)基础字符数组从源字符串到目标字符串(深层副本),而不是仅复制它们的指针(浅拷贝)。
所以是的,你的代码是正确的。
由于所有成员变量都可以使用赋值运算符进行复制,因此无需显式声明复制构造函数。
尽管如果您使用 C 样式字符串,您将需要一个复制构造函数。在这种情况下,默认复制构造函数执行浅拷贝,而您可能打算执行深层复制。
相关文章:
- 为什么我的 std::ref 无法按预期工作?
- 为什么我的 std::set 不存储唯一值?
- 为什么我的 std::atomic<int> 变量不是线程安全的?
- 为什么我的std :: Map失去了价值
- 调整我的std :: string时,角色缓冲区会发生什么
- 我的 std::strcopy 实现有什么问题?(分段错误)
- 我的std::exchange不在命名空间std中
- 我可以在获取我的"std::future"时执行并等待它吗?
- 为什么我的 std::set find() 不起作用
- 为什么我的 std::string 被转换为 std::basic_string<char>?
- 为什么我需要一个类似于复合文字的临时构造来初始化我的std::数组成员
- 初始化我的std::map
- 复制构造函数 - 我是否正确设置了我的 std::字符串
- 为什么我的 std::字符串通过流获得被覆盖
- C++ 内存泄漏与我的 std::映射 &对象和标准::矢量 &对象
- 逃脱者留在我的std::string中
- 为什么我的std::unordereded_map访问时间不是恒定的
- 为什么元素没有添加到我的std::map(C++)中
- 如何使我的std::vector实现更快
- std::less<> 不适用于我的 std::map