条款11:为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符 (第三章 构造函数,析构函数和赋值操作符)

来源:互联网 发布:linux查看线程cpu 编辑:程序博客网 时间:2024/06/05 10:49

  几乎所有的类都有构造函数,析构函数和赋值操作符。

#include <iostream>
#include <string.h>
using namespace std;

class String
{
public:
        String(const char*value);
        ~String();
private:
        char *data;
};

String::String(const char*value)
{
        if(value != NULL)
        {
                data = new char[strlen(value) + 1];
                strcpy(data, value);
        }
        else
        {
                data = new char[1];
                *data = '\0';
        }
}
String::~String()
{
        delete[]data;
}


int main()
{
        String a("hello");
        String b("world");
        b = a;
}

上面的代码有两个问题:

1.b曾指向的内存永远不会被删除,因而会永远丢失。

2.现在a和b包含的指针指向同一个字符串,那么只要其中一个离开了它的生存空间,其析构函数就会删除掉另一个指针还指向的那块内存。

 像这样的情况,必须重定义operator =;
原创粉丝点击