1
2
您没有提供自己的复制构造函数或赋值运算符。因此,当您进行复制或赋值时,编译器生成的复制构造函数和赋值运算符被使用,在这种情况下,它们实际上做不到正确的事情。它们只是复制每个成员,这样您最终得到两个引用 相同的 字符数组。而且两个配置对象都觉得有责任删除数组,这几乎肯定会导致“双重删除”错误。 记住” rule of three “。这里的问题是指针的行为不符合您的要求。如果您使用了std::string作为成员,那么就不必编写自己的复制构造函数、析构函数和赋值运算符。这是因为编译器生成的操作只是对其成员调用相关操作,而字符串成员已经正确地处理了这一点——与指向char的指针不同。 |
2
6
使用strdup的事实表明您的代码有问题,而错误的是您没有复制构造函数。任何时候有一个析构函数,您几乎肯定也需要一个复制构造函数,当您按值调用时,它将正确地复制对象。 要改进代码:
|
3
1
当你用引用调用它时,它的复制
|
4
1
您必须添加一个复制构造函数并处理char*名称;(意味着,分配和删除内存,用值初始化)。 无论如何,对于字符串使用char*不是一个好主意。使用std::string,它将为您处理所有事情。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |