2
我有以下的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
「沒有內存泄漏」 - 我不希望這樣,因爲在整個源代碼中沒有一個動態分配。無論如何,我敢問你爲什麼要在構造函數中const_fast這個'this'? – WhozCraig
'const_cast'與它無關。你可以做'* this = A(10)'。或'x = 10' :-) –