【发布时间】:2014-07-17 13:32:08
【问题描述】:
是否保证weak_ptr在shared_ptr重置为包含相同地址时会过期?
#include <cassert>
#include <memory>
int main()
{
int* i = new int(0);
std::shared_ptr<int> si( i );
std::weak_ptr<int> wi = si;
si.reset( i );
assert( wi.expired() ); // wi.expired() == true (GCC 4.7)
}
或者是wi.expired()的值没有定义的情况?
编辑:
我现在稍微修改一下问题:
是否保证shared_ptr 重置为相同地址时weak_ptr 将过期,该地址在初始化weak_ptr 时包含shared_ptr?
#include <cassert>
#include <memory>
int main()
{
int* i = new int(0);
std::shared_ptr<int> si( i );
std::weak_ptr<int> wi = si;
si.reset();
int* j = new int(0);
// Suppose that new returns the same address that contains variable i :
assert(j == i);
si.reset( j );
assert( wi.expired() ); // wi.expired() == true (GCC 4.7)
}
【问题讨论】:
标签: c++ c++11 shared-ptr weak-ptr