什么是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 错误崩溃或输出乱码字符串。我理解问题在于复制后两个对象指向同一