私はランダムに失敗するテストをしています。私は、ポインター値で順序付けられたstd :: setのオブジェクトの順序が原因であると考えています。 しかし、私の現在のexeでは、テストは常にパスします。私のセットのオブジェクトの順序が2つの実行の間で異なるように、ポインタの作成を「ミックス」できる方法はありますか?ランダムstd :: setを再現する<T*>オーダー
つまり、特定のC++コードに対してポインタの「並べ替え順」(p1 < p2)ですか、別のコンパイルや異なる実行で異なるソート順を持つことはできますか?
たとえば、このコードでは、p1とp2の作成の間に「p1b.reset(nullptr)」を追加すると、p1/p2の「ソート順」が逆転します。ソースコードを変更することなく、この順序に影響を与える他の方法はありますか?
int main(void)
{
std::unique_ptr<MyClass> p1b(new MyClass());
//Lot of code, with memory allocated/deallocated
std::unique_ptr<MyClass> p1(new MyClass());
//p1b.reset(nullptr);
//Lot of code, with memory allocated/deallocated
std::unique_ptr<MyClass> p2(new MyClass());
std::cout << "p1: " << p1.get() << std::endl;
std::cout << "p2: " << p2.get() << std::endl;
}
を与える: "p1b.reset(nullptr)" で
p1: 0x171c030
p2: 0x171c050
をコメントアウト:
p1: 0x21f9030
p2: 0x21f9010
さらに詳しく説明できますか?おそらく動作するコードスニペットを提供しますか? – WhiZTiM