我有这门课:
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)