【发布时间】:2015-08-21 14:41:33
【问题描述】:
#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;
}
}
use_count() 返回值为 1,因此我认为拥有该对象的最后一个 shared_ptr 将被销毁,因此将调用析构函数。但事实并非如此。任何人都可以解释为什么?如果我想保持这样的结构: 新标准::shared_ptr(新 Foo) 并且还调用了析构函数,我该怎么办? 代码只是为了好玩而写的,没有任何应用背景。
【问题讨论】:
-
动态分配
shared_ptr绝对没有意义。
标签: c++ c++11 destructor shared-ptr weak-ptr