Vit*_*ito -4 c++ destructor shared-ptr weak-ptr c++11
#include <memory>
#include <iostream>
struct Foo {
Foo() { std::cout << "Constructor ...\n"; }
void doSth() {std::cout << "hi" << std::endl;}
~Foo() { std::cout << "Destructor ...\n"; }
};
int main() {
{std::weak_ptr<Foo> jack = (*(new std::shared_ptr<Foo>(new Foo)));
std::cout << (jack).use_count() << std::endl;
// std::shared_ptr<Foo> ptr = jack.lock();
// std::cout << ptr.use_count() << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
use_count()返回值为1,因此我认为拥有该对象的最后剩余的shared_ptr将被销毁,因此将调用析构函数.但事实并非如此.任何人都可以解释原因吗?如果我想维护这样的结构:new std :: shared_ptr(new Foo)并且还调用了析构函数,我该怎么办?代码只是为了好玩而编写,没有任何应用程序背景.
奇怪的是,你动态地分配了它shared_ptr,并且从未做过任何破坏它的事情.如果shared_ptr没有被摧毁,那么它也不会被摧毁.
目前还不清楚你在这里要做什么.你正在写一些没有用例的奇怪,笨拙的代码,并想知道如何"让它工作".好吧,"让它工作",编写非奇怪和非尴尬的代码.根据定义,这是解决方案.