Avatar ·

什么是C++中的“三法则”以及为什么没有它会导致内存泄漏?

大家好!我开始学习C++,遇到了一个问题。我写了一个简单的类,通过动态内存存储字符串。看起来逻辑没问题,但程序崩溃或行为异常。 这是我的代码: ```cpp class String { public: String(const char* str = "") { size = strlen(str); data = new char[size + 1]; strcpy(data, str); } ~String() { delete[] data; } private: char* data; int size; }; int main() { String s1("Hello"); String s2 = s1; // 复制 String s3("World"); s3 = s1; // 赋值 return 0; } ``` 运行后程序因double free错误崩溃。我明白问题在于复制时两个对象指向同一块内存,然后都试图释放它。但如何正确修复?大家提到的“三法则”是什么?为什么说C++11出现了“五法则”?希望能得到详细解释。