【发布时间】:2018-07-30 19:33:13
【问题描述】:
我定义并分配了 2 个shared_ptrs nullptr。在案例 1 中,我使用默认构造函数,在案例 2 中,我使用带有 delete 方法的构造函数。
shared_ptr<int> sptr2(nullptr);
cout << "sptr2 use_count: " << sptr2.use_count() << endl;
shared_ptr<int> sptr6(nullptr, default_delete<int>());
cout << "sptr6 use_count: " << sptr6.use_count() << endl;
输出是:
sptr2 use_count: 0
sptr6 use_count: 1
我不明白为什么 sptr6 在没有任何有效指针的情况下使用计数为 1。
g++ (GCC) 4.8.5 20150623(红帽 4.8.5-16)
【问题讨论】:
-
GCC 4 系列中的 C++11 实现不完整。即使存在一个类或函数,它也可能没有完全实现或包含错误。我强烈建议您更新到更高版本的 GCC。
-
顺便说一句,
shared_ptr<int> sptr2(nullptr);在技术上不是默认构造,那就是shared_ptr<int> sptr2;结果应该是一样的,但你没有使用默认构造函数。至少根据thisshared_ptrconstructor reference.
标签: c++ c++11 shared-ptr smart-pointers