|
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class dog
{
public:
int age;
int num;
char* p_name;
~dog()
{
if (p_name)
{
delete[] p_name;
p_name = NULL;
}
}
dog& operator=(dog& p)
{
age = p.age;
num = p.num;
if (p_name)
{
delete[] p_name;
p_name = NULL;
}
int name_lens = strlen(p.p_name) + 1;
p_name = new char[name_lens];
memset(p_name, 0, name_lens);
strcpy(p_name, p.p_name);
return *this;
}
};
void test()
{
dog d1;
d1.age = 18;
d1.num = 1;
char str[] = "zhaoguoliang";
d1.p_name = str;
dog d2;
d2 = d1;
cout << d2.age << " " << d2.num << " " << d2.p_name << endl;
}
int main()
{
test();
system("pause");
return 0;
}
错误
char str[] = "zhaoguoliang";
d1.p_name = str;
这个str 是栈里的,不能用delete
类中的指针最好不要直接赋值
- void Set_Pname(const char* _p_name) {
- if (p_name) {
- delete[] p_name;
- p_name = NULL;
- }
- p_name = new char[strlen(_p_name) + 1];
- strcpy(p_name, _p_name);
- }
- 调用
- d1.Set_Pname("VC驿站");
复制代码
|
上一篇: VS2017,SetFilePointer函数从后往前读取数据出现错误下一篇: 一个大二学生的迷茫
|