什么是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出现了“五法则”?希望能得到详细解释。