这是c ++中的代码内存泄漏?

Kin*_*uoc -3 c++ memory-leaks

我有这门课:

class Base{
     private:
        char *message;
     public:
        Base(string message`);
        ~Base();    
};
Run Code Online (Sandbox Code Playgroud)

编辑:对不起,我忘了给我的构造函数!
当我实现如下的析构函数时:

Base::Base(string message1){
     message = new char[message1.size() + 1]
     message[message1.size()] = '\0';
     memcpy(message, message1.c_str(), message.size());
}
Base::~Base(){
     delete message;  
}
Run Code Online (Sandbox Code Playgroud)

有时系统出错了stop working,但如果不是delete message,我会使用message = NULL,一切都会好的!所以,如果我只是message = NULL在我的析构函数中声明,我的程序是否会出现内存泄漏?

R. *_*des 10

绝对没有理由在new这里使用.构造函数接受a std::string然后手动将其内容复制到新的动态分配的数组中char.这完全没有价值.相反,构造函数只是将它复制到另一个std::string,std::string复制构造函数也会这样做,但有很多免费的好处:异常安全,没有内存泄漏,以及正确的复制语义.

class Base{
     private:
        string message;
     public:
        Base(string message);
        // maybe a virtual destructor is desirable if this is a polymorphic base class
        // virtual ~Base() {}
};

Base::Base(string message1) : message(message1) {}
Run Code Online (Sandbox Code Playgroud)


Bo *_*son 5

你的问题是使用delete创建的东西new[].它需要一个delete[] message正确释放字符串.

将指针设置为NULL只会掩盖问题,并且泄漏内存.