c++深度拷贝中的内存泄漏

Memory Leakage in Deep Copy C++

本文关键字:内存 泄漏 深度 拷贝 c++      更新时间:2023-10-16

我正在尝试理解深度复制并编写这个程序。

#include <iostream>
#include <string.h>
using namespace std;
char a[10];
class String
{
    public:
    char *ptr;
        String()
        {
            ptr = a;
        }
        void setString(const char *str)
        {
            strcpy(ptr,str);
        }   
        void operator=(String k){
            ptr = new char[10];
            strcpy(ptr, k.ptr);
        }
        char* getString()
        {
            return ptr;
        }
};
class student
{
    public:
    String name;
        student(){  }
        student (const student &O){
            name=O.name;
        }
};
int main(){
    student obj;
    obj.name.setString("ABC");
    student obj1=obj;
    obj1.name.setString("NEW");
    cout << obj.name.getString() << endl;
    cout << obj1.name.getString() << endl;
}

工作得很好。但是我试图调用析构函数来释放内存,当我写Destructor时,程序不能正常运行。

~String(){
            delete ptr;
        }

我知道这可能是由于ptr = a;,我已经测试了其他简短的例子和ptr=a引起的问题,当Destructor调用。

  1. 一切都好,而不是析构器?
  2. 如何释放内存?

注意:这个程序只是为了理解深度复制。

有析构函数会有所帮助-但是正如在注释中指出的那样,您对内部存储的处理不一致(有时指向全局,有时指向动态内存)

所以你真正需要考虑的是:

  • 使用一致的分配方案
  • 在未分配时使用NULL
  • 添加析构函数