我是一个C++初学者,我正在学习shared_ptr的概念。 我也明白了以下几点: - 几个shared_ptr对象可以拥有同一个对象。 - 当以下任一情况发生时,对象将被销毁并且其内存将被释放: - 拥有该对象的最后一个remaining shared_ptr被销毁。 - 拥有该对象的最后一个remaining 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()。 请解释这是如何发生的?