私は次のC++コードを持っています。 Linuxマシンでg ++ 4.9.2でコンパイルできます。それから私はそれを実行すると、10を出力します。新しいオブジェクトが作成され、デフォルトコンストラクタのconst_castを使って作成されたポインタに割り当てられているようです。メモリリークはありません(valgrindを使用してチェックしました)。これは何らかの未定義の行動ですか、それとも合法ですか?"this"ポインタのconst_castは未定義の動作ですか?
#include <iostream>
using namespace std;
class A
{
public:
A() : x(0)
{
A *tmp = const_cast<A*>(this);
*tmp = A(10);
}
A(int x)
{
this->x = x;
}
int getX() const
{
return x;
}
private:
int x;
};
int main()
{
A a;
cout << a.getX() << endl;
return 0;
}
'this'はコンストラクタでconstであるべきではないので、const-castは何もしません。 – tkausl
"メモリリークはありません" - このソース全体に単一の動的割り当てがないので、私は望んでいません。それにもかかわらず、私はなぜあなたが*コンストラクタ*で 'this'を' const_fast'したいのか尋ねます。 – WhozCraig
'const_cast'はそれとは関係ありません。あなたは '* this = A(10)'を行うことができます。または 'x = 10' :-) –