C++ 中的复制构造函数抛出空值错误

kes*_*Him 0 c++ deep-copy copy-constructor shallow-copy

(和cpp失去联系太久了,想复习一下明天的面试)。
正在修订深层复制与浅层复制。写了代码:


#include <iostream>

class MyClass {
public:
    unsigned int* uivar = nullptr;

    MyClass() : uivar(new unsigned int) {
        *(this->uivar) = 3;
    }

    ~MyClass() { delete uivar; }

    MyClass(const MyClass& mCopy) {
        *(uivar) = *(mCopy.uivar);
    }
};

void function(MyClass m) {
    *(m.uivar) = 4;
}

int main() {
    MyClass myClass;
    MyClass myClassCopy = myClass;
    std::cout << *(myClass.uivar) << "\n";
    std::cout << *(myClassCopy.uivar) << "\n";
    function(myClass);
    std::cout << *(myClass.uivar) << "\n";
    std::cout << "hhhh" << "\n";
    *(myClassCopy.uivar) = 5;
    std::cout << *(myClass.uivar) << "\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误(-警告):Dereferencing NULL pointer uivar位于*(uivar) = *(mCopy.uivar);.
我缺少什么?

Cor*_*mer 5

您的复制构造函数不正确,它需要分配自己的指针

MyClass(const MyClass& mCopy) {
    uivar = new unsigned int(*mCopy.uivar);
}
Run Code Online (Sandbox Code Playgroud)