Deep Copy C ++中的内存泄漏

时间:2015-08-01 20:15:33

标签: c++

我正在尝试了解Deep Copy并编写此程序。

#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来释放内存,当我写Destructor时,程序运行不正常。

~String(){
            delete ptr;
        }

我知道这可能是由于ptr = a;我已经使用其他简短示例进行了测试,而ptr = a在调用Destructor时导致了问题。

  1. 一切都很好而不是Destructor?
  2. 我如何释放记忆?
  3. 注意:本程序只是为了理解Deep副本。

1 个答案:

答案 0 :(得分:2)

使用析构函数会有所帮助 - 但正如评论中指出的那样,内部存储的处理方式不一致(有时指向全局,有时指向动态内存)

所以你真正想要考虑的一些事情是:

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