Avatar ·

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

你好!我开始学习C++,遇到了一个奇怪的错误。我有一个类 `SimpleString`,它存储动态字符串。我写了构造函数和析构函数,但当我尝试复制对象或将一个对象赋值给另一个对象时,程序崩溃或输出垃圾数据。以下是示例代码: ```cpp #include #include class SimpleString { public: char* data; SimpleString(const char* str) { data = new char[strlen(str) + 1]; strcpy(data, str); std::cout << "Constructed: " << data << std::endl; } ~SimpleString() { delete[] data; std::cout << "Destructed" << std::endl; } }; int main() { SimpleString a("Hello"); SimpleString b = a; // 复制 SimpleString c("World"); c = a; // 赋值 return 0; } ``` 程序因 double free 错误崩溃或输出乱码字符串。我理解问题在于复制后两个对象指向同一