- 当类申请了堆中的资源,既类的成员使用new函数在堆中申请内存,并且进行了类的复制操作时,会出现这个问题。
- 浅拷贝就是多了一个指针,指向了原来的内存,深拷贝是增加了一个指针,并且指向了原来的函数。
举例
class String {
private:
    char * str;
public:
    String() :str(NULL) { }
    const char * c_str() const { return str; };
    String & operator = (const char * s);
    ~String();
};
String s1, s2;
s1 = "this";
s2 = "that";
s2 = s1;
- 这种情况是,此时s2和s1指向了同一段内存,同时s2所指的内存将会成为内存垃圾,可能导致泄露。而我们需要的复制是两个指针指向的内存中的内容相同,于是我们对=进行重载
String & String::operator = (const String & s)
{
    if(str == s.str)
        return * this;
    if(str)
        delete[] str;
    if(s.str){  //s. str不为NULL才执行复制操作
    str = new char[ strlen(s.str) + 1 ];
        strcpy(str, s.str);
    }
    else
        str = NULL;
    return * this;
}
参考资料
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。