为什么不调用析构函数?

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)并且还调用了析构函数,我该怎么办?代码只是为了好玩而编写,没有任何应用程序背景.

Lig*_*ica 9

奇怪的是,你动态地分配了它shared_ptr,并且从未做过任何破坏它的事情.如果shared_ptr没有被摧毁,那么它也不会被摧毁.

目前还不清楚你在这里要做什么.你正在写一些没有用例的奇怪,笨拙的代码,并想知道如何"让它工作".好吧,"让它工作",编写非奇怪和非尴尬的代码.根据定义,这是解决方案.

  • "离奇"可能太弱了;) (2认同)