私は使用にあまり慣れておらずweak_ptr
、かなり混乱する状況に直面しています。Intel XE 2019 Composer update 5(パッケージ2019.5.281)をVisual Studio 2019 ver。と組み合わせて使用しています。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の方法です