folowingコードは期待できない出力を示しています。STL Vectorは割り当てられていないオブジェクトのデストラクタを呼び出していますか?
class test
{
public:
test()
{
std::cout << "Created" << (long)this << std::endl;
}
~test()
{
std::cout << "Destroyed" << (long)this << std::endl;
}
};
int main(int argc, char** argv)
{
std::vector<test> v;
test t;
v.push_back(t);
return EXIT_SUCCESS;
}
それが示して実行すると:
Created-1077942161
Destroyed-1077942161
Destroyed674242816
は、私は2番目の「破壊」の出力はすべきではないと思います。ベクトルを使用しない場合、結果は1つのCreatedと1つのDestroyed行が予想どおりになります。この動作は正常ですか?
それがあるべきよう
+1 [SSCCE](http://sscce.org/) – Flexo
ポインタを出力するには、voidポインタにキャストすることをお勧めします。 'std :: cout <<(void *)this << std :: endl ; '。 –
また、 'EXIT_SUCCESS'を返すことはオプションです。戻り値を 'main'で省略すると、' 0'が返されます(どちらの数字があなたのプラットフォームで「正常終了」を意味するか)。 –