我不习惯使用它weak_ptr
,我正面临一个令人困惑的情况。我正在将Intel XE 2019 Composer更新5(程序包2019.5.281)与Visual Studio 2019版本结合使用。16.2.5。我用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
怎么了?重置shared_ptr
关联时,修改/无效是正常的weak_ptr
吗?我对获得的结果感到有些困惑。说实话我没想到会有这个结果...
编辑1
虽然该错误发生在64位配置中,但不是32位。在此更高版本的配置中,结果是预期的。
编辑2
该错误仅在Debug中出现。当我构建Release时,我得到了预期的结果。
4
无法在g ++上进行复制,也无法在clang ++上进行复制
—
Borgleader
我认为您的实现存在错误。 gcc产生正确的结果
—
NathanOliver
无法在Visual Studio 2019(v.16.2.5)中进行
—
复制-Frodyne
不,这绝对不正常。
—
畸形的
如果它有助于调试,
—
Eric
-572662307 = 0xDDDDDDDD
这是msvc指示释放的堆内存的方式