【发布时间】:2021-05-18 11:04:47
【问题描述】:
我已经阅读了很多与此相关的问题,但无法回答我的问题。
我创建了一个类如下-
class exampleClass{
public:
exampleClass(int n){
cout<<"Created Class"<<endl;
this->number = n;
}
~exampleClass(){
cout<<endl<<"This class is destroyed Now"<<endl;
}
template<typename t> t
addNum(t a, t b){
return a + b;
}
void print(){
cout<<this->number<<endl;
}
private:
int number;
};
我制作了 2 个shared_ptr(或就此而言unique_ptr,错误相同)如下 -
int main(){
exampleClass* object = new exampleClass(60);
std::shared_ptr<exampleClass> p1(object);
std::shared_ptr<exampleClass> p2 (object);
p1->print();
}
现在它最后抛出的错误是 -
free(): double free detected in tcache 2
Aborted (core dumped)
我无法理解为什么最后会出现错误。上面的代码不应该等于p2 =p1(在shared_ptr的情况下)或p2 = std::move(p1)对于unique_ptr,因为两个指针都指向同一个对象?
TIA
PS - 标题可能有点误导或不准确,但我不知道到底应该是什么标题。
【问题讨论】:
-
如果你编码了 p2 = object,编译器如何猜测 p2 = p1?它完全按照您的编码完成。
-
从原始指针创建
shared_ptr或unique_ptr意味着创建的智能“指针”现在拥有指向的对象,并且您不能将所有权移交给其他任何对象. (这有点像送你的车;你只能这样做一次,然后新主人就可以决定如何处理它。) -
您已经了解了代码中应该出现 0 次
new的原因之一。
标签: c++ c++11 shared-ptr smart-pointers unique-ptr