2011-11-21 2 views
0

포인터를 반환하는 클래스에 대한 변환 함수를 작성할 수 있습니까? 또한 개체를 삭제하기 위해 식을 삭제할 때도 사용할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?클래스 개체를 삭제하는 변환 기능?

+1

을 당신은 this'은'반환거야? 그렇지 않으면 불가능합니다. – tenfour

+1

당신은'class T {operator T * ({return this; }};'? 그러나 나는 이것이 유용하거나 권장할만한 상황을 생각하기 위해 애 쓰고있다. –

+2

의미가 없습니다. 객체는 할당 방법을 결정하지 않으므로 특정 방식으로 할당을 해제하는 논리가 없어야합니다. –

답변

1

삭제 X가 작동하려면 X는 원래 개체의 형식 (또는 가상 소멸자가있는 공유 기본 유형)이어야합니다. 그래서 평범한 연산자는 필요하지 않습니다. 왜냐하면 변환 연산자가 필요없는 암시 적 캐스트를 수행하는 경우에만 작동하기 때문입니다.

그리고 다른 답변은 효과적으로 "아니오"입니다.

class Base 
{ 
public: 
    virtual ~Base() {} 
}; 

class Thing1 : public Base 
{ 
public: 
    ... whatever ... 
} 

class Thing2 : public Base 
{ 
public: 
    ... 
} 

당신은 물건을 수행 할 수 있습니다 내가 가정

Thing1 * t = new Thing1; 
Base * b = t; // okay 
delete b; // okay, deletes b (which is also t) 
      // BECAUSE we provided a virtual dtor in Base, 
      // otherwise a form of slicing/memory loss/bad stuff would occur here; 
Thing2 * t2 = new Thing2; 
Thing1 * t1 = t2; // error: won't compile (a t2 is not a t1) 
        // and even if we cast this into existence, 
        // or created an operator that provided this 
        // it would be "undefined behavior" - 
        // not "can be deleted by delete operator" 
관련 문제