8
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <string>
class A
{
public:
    std::string s;
    A()
    {
        s = "string";
        new(this)A(*this);
    }
};
int main()
{
    A a;
    std::cout<<a.s;
    return 0;
}

出力に空の文字列が表示されます。C++ 標準は、そのような動作について何と言っていますか?

4

2 に答える 2

4

ここには少なくとも 2 つの問題があるはずです。

  • A をそれ自体のコピーで初期化しようとしています
  • コンストラクター内では、 A はまだ完全に構築されていないため、実際にコピーすることはできません

new(this)それ自体が疑わしいことは言うまでもありません。

于 2012-03-19T11:01:48.230 に答える
0

これを行うことで、 のコンストラクターを 2 回続けて呼び出しsているため、動作は未定義です (そして、メモリ リークが発生する可能性が最も高いです)。

于 2012-03-19T12:16:39.807 に答える