AKN*_*AKN 0 c++ copy-constructor
这是程序......
class CopyCon
{
public:
char *name;
CopyCon()
{
name = new char;
}
CopyCon(const CopyCon &objCopyCon)
{
name = new char;
_tcscpy(name,objCopyCon.name);
}
~CopyCon()
{
if( name != NULL )
{
delete name;
name = NULL;
}
}
};
int main()
{
CopyCon objCopyCon1;
objCopyCon1.name = "Hai";
CopyCon objCopyCon2(objCopyCon1);
objCopyCon1.name = "Hello";
cout<<objCopyCon2.name<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一旦代码执行完成,当析构函数调用时,它会在'delete'上崩溃说...
计划:......
HEAP CORRUPTION DETECTED:在正常块(#124)之后的0x00366990.CRT检测到应用程序在堆缓冲区结束后写入内存.
(按"重试"调试应用程序)
我们不必在析构函数中清除堆内存.这个程序有什么问题?请帮忙!复制构造函数按预期完美地工作.但还是......!?
问题是你只char在复制构造函数中分配一个.
在main您分配一个4字节的字符串(记住空值),但是当您复制对象时,您只为1个字节分配足够的空间.
你可能想做的就是改变
name = new char;
Run Code Online (Sandbox Code Playgroud)
至
name = new char[tcslen(objCopyCon.name) + 1];
Run Code Online (Sandbox Code Playgroud)
在析构函数中:
delete name;
Run Code Online (Sandbox Code Playgroud)
至
delete [] name;
Run Code Online (Sandbox Code Playgroud)
也:
您要分配"Hai"并"Hello"以objCopyCon1.name这是隐藏在构造函数中分配的内存.这个记忆永远不会被释放!
| 归档时间: |
|
| 查看次数: |
847 次 |
| 最近记录: |