gpt4 book ai didi

c++ - 如何通过 operator= 在 shared_ptr 中释放内存?

转载 作者:行者123 更新时间:2023-12-05 02:46:07 26 4
gpt4 key购买 nike

我是c++的初学者,我正在学习shared_ptr的概念。我也明白多个 shared_ptr 对象可能拥有同一个对象,当发生以下任一情况时,该对象将被销毁并释放其内存:

1.拥有该对象的最后剩余的shared_ptr被销毁;2. 拥有该对象的最后剩余的 shared_ptr 通过 operator= 或 reset() 分配另一个指针。

但是当我尝试执行一个示例程序时

     class Rectangle { 
int length;
int breadth;

public:
Rectangle(int l, int b)
{
length = l;
breadth = b;
}

int area()
{
return length * breadth;
}
};

int main()
{

shared_ptr<Rectangle> P1(new Rectangle(10, 5));
cout << P1->area() << endl;

shared_ptr<Rectangle> P2;
P2 = P1; //how is this possible

// This'll print 50
cout << P2->area() << endl;

// This'll now not give an error,
cout << P1->area() << endl;
cout << P1.use_count() << endl;
return 0;
}

在“P2=P1”之后,分配给 P1 的内存必须被释放,对吗?但我们仍然可以打印 P1->area()。请解释这是怎么发生的?

最佳答案

2.the last remaining shared_ptr owning the object is assigned another pointer via operator= or reset().

是的。

After "P2=P1" the memory allocated to P1 has to be deallocated right?

没有。如果它指向某些东西,它可能会发生在 P2 上。不是 P1

规则 (2) 背后的逻辑是赋值会覆盖第一个操作数的值,因此第一个操作数将不再指向它原来的位置。如果它是指向某物的最后一个指针,则不再指向它,并且可以将其删除。

关于c++ - 如何通过 operator= 在 shared_ptr 中释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65641658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com