美文网首页
C++ 深/浅拷贝

C++ 深/浅拷贝

作者: hey白启明 | 来源:发表于2019-03-10 20:06 被阅读0次
  • 当类申请了堆中的资源,既类的成员使用new函数在堆中申请内存,并且进行了类的复制操作时,会出现这个问题。
  • 浅拷贝就是多了一个指针,指向了原来的内存,深拷贝是增加了一个指针,并且指向了原来的函数。

举例

  • 我们申明了String类
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;
}
  • 这样重载后,在复制的时候将会开辟一段新的内存。

参考资料

相关文章

  • c/c++/c++11 浅拷贝和深拷贝

    目录 1 c++拷贝 1.1 拷贝构造函数1.2 浅拷贝1.3 深拷贝 2 c语言拷贝 2.1 浅拷贝2.2 深拷...

  • [C++之旅] 15 深拷贝与浅拷贝

    [C++之旅] 15 深拷贝与浅拷贝 拷贝构造函数分为深拷贝和浅拷贝两种方式 浅拷贝只是将被拷贝的对象的成员直接赋...

  • C++深拷贝浅拷贝

    Q:什么时候会调用拷贝构造函数? A:1.一个对象以值传递的形式传入函数体(实参传递给形参的实际上是实参的拷贝对象...

  • C++深拷贝浅拷贝

    Q:什么时候会调用拷贝构造函数? A:1.一个对象以值传递的形式传入函数体(实参传递给形参的实际上是实参的拷贝对象...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • C++中容易被忽略的基础知识

    const和define的区别C++中static关键字的总结C++中的构造函数及深拷贝浅拷贝c++基础之引用和指...

  • C++ 深/浅拷贝

    当类申请了堆中的资源,既类的成员使用new函数在堆中申请内存,并且进行了类的复制操作时,会出现这个问题。 浅拷贝就...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

网友评论

      本文标题:C++ 深/浅拷贝

      本文链接:https://www.haomeiwen.com/subject/huwyuqtx.html