提问人:kesarling He-Him 提问时间:11/30/2022 更新时间:11/30/2022 访问量:147
复制构造函数在 C++ 中抛出 null 值错误
Copy constructor throws null value error in C++
问:
(与cpp失去联系太久了,想为明天的面试复习一下)。
正在修改 Deep Copy 与 Shallow Copy。 编写代码:
#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;
}
错误 (-警告): 在 .
我错过了什么?Dereferencing NULL pointer uivar
*(uivar) = *(mCopy.uivar);
答:
5赞
Cory Kramer
11/30/2022
#1
您的复制构造函数不正确,它需要分配自己的指针
MyClass(const MyClass& mCopy) {
uivar = new unsigned int(*mCopy.uivar);
}
评论
0赞
kesarling He-Him
12/1/2022
哎呀脑子放屁......谢谢伙计!
0赞
kesarling He-Him
12/1/2022
这本身可能是一个单独的问题,但是浅层复制可以用普通而不是指针来实现吗?“正常”变量的默认值恰好是深拷贝,而指针的默认值是浅拷贝......unsigned int
1赞
Avi Berger
12/1/2022
@kesarlingHe-Him 与指针不同,没有“深”,它就在那里。因此,在非指针无符号 int 情况下,浅拷贝和深拷贝之间没有区别。unsigned int
评论