我编写了以下代码,以查看当shared_ptr<Thing>
的最后一个引用是shared_ptr<void>
并且其自身被销毁时,它会表现出什么行为。
#include <iostream>
#include <string>
#include <memory>
using namespace std;
struct Thing{
~Thing(){
cout<<"Destroyed\n";
}
int data;
};
int main(){
{
shared_ptr<void> voidPtr;
{
shared_ptr<Thing> thingPtr = make_shared<Thing>();
voidPtr = thingPtr;
}
cout<<"thingPtr is dead\n";
}
cout<<"voidPtr is dead\n";
return 0;
}
输出为:
thingPtr is dead
Destroyed
voidPtr is dead
它表现出我喜欢的方式,但完全出乎意料,我想了解这里发生了什么。最初的共享指针不再存在,最终只是一个shared_ptr<void>
。因此,我认为这个共享指针应该像持有void*
一样,并且对于Thing::~Thing()
一无所知,但它却调用了它。这是故意设计的吗?空指针共享指针是如何实现这一点的?
shared_ptr
的原始删除器被保留。 - πάντα ῥεῖstd::shared_ptr
还是任何具有共享功能的“拥有”智能指针);它是动态分配的。 - curiousguy