无锡设计网站找哪家,中国建设银行网站查询密码是什么意思,石家庄市建设厅网站,做响应网站的素材网站有哪些1.C中成员对象如果指向了堆内存的空间#xff0c;如果这时候使用了系统提供的拷贝构造函数#xff08;默认浅拷贝#xff09;#xff0c;会造成内存重复释放的问题#xff0c;导致程序down掉#xff0c;解决办法修改默认的拷贝构造函数#xff0c;也给新的对象需要堆内存…1.C中成员对象如果指向了堆内存的空间如果这时候使用了系统提供的拷贝构造函数默认浅拷贝会造成内存重复释放的问题导致程序down掉解决办法修改默认的拷贝构造函数也给新的对象需要堆内存的成员变量去开启一个堆内存 避免堆内存重复释放
#include pch.h
#include iostream
using namespace std;
class Person {
public:char *m_name;int m_age;Person(const char *name, int age) {m_name (char *)malloc(strlen(name) 1);strcpy(m_name, name);m_age age;}Person(const Person p) {// m_name p.m_name; // 系统提供的浅拷贝 会引起内存重复释放m_age p.m_age;m_name (char *)malloc(strlen(p.m_name) 1);//修改为深拷贝strcpy(m_name, p.m_name);}~Person() {if (m_name!NULL) {cout person xigou endl;free(m_name);m_name NULL;}}
};void test1() {Person p1(Tom, 18); // 这个Tom也是分配在常量区吗 是的Person p2(p1); // 调用拷贝构造函数
}int main()
{//test1();//Person * p3 (Person *)malloc(sizeof(Person)); //着重看下这种内存分配方式 整个对象分配在了 堆内存 p3这个指针变量在栈内存//p3-m_age 18;//p3-m_name const_castchar *(nihao); // 这个nihao也是分配在了常量吗 是的 //free(p3);return 0;
}