Я новичок в С++, я изучал концепцию 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(). Пожалуйста, объясните, как это происходит?