我不太习惯使用 weak_ptr
,并且我面临着非常困惑的情况。我正在使用与 Visual Studio 2019 版本16.2.5 结合使用的Intel XE 2019 Composer更新5 (版本2019.5.281)。 我编译64位。 我使用标准的 C ++ 17 。
以下是我的试验解决方案的代码:
#include <memory>
#include <iostream>
using namespace std;
int main( int argc, char* argv[] )
{
shared_ptr<int> sp = make_shared<int>( 42 );
cout << "*sp = " << *sp << endl;
weak_ptr<int> wp = sp;
cout << "*sp = " << *sp << ", *wp = " << *wp.lock() << endl;
wp.reset();
cout << "*sp = " << *sp << endl;
return 0;
}
我期望得到的输出是:
*sp = 42
*sp = 42, *wp = 42
*sp = 42
...但这是我得到的结果:
*sp = 42
*sp = 42, *wp = 42
*sp = -572662307
发生了什么?当关联的一个或多个weak_ptr
被重置时,shared_ptr
是否会被修改/失效是正常的吗?我对我得到的结果感到有些困惑。说实话,我没有预料到这个结果...
编辑1
尽管在64位配置中出现了错误,但在32位配置中没有出现。在后者的配置中,结果是预期的。
编辑2
该错误仅在Debug模式下出现。当我在Release中构建时,我得到了预期的结果。