다음 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' :-) –