0
포인터를 반환하는 클래스에 대한 변환 함수를 작성할 수 있습니까? 또한 개체를 삭제하기 위해 식을 삭제할 때도 사용할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?클래스 개체를 삭제하는 변환 기능?
포인터를 반환하는 클래스에 대한 변환 함수를 작성할 수 있습니까? 또한 개체를 삭제하기 위해 식을 삭제할 때도 사용할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?클래스 개체를 삭제하는 변환 기능?
삭제 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"
을 당신은 this'은'반환거야? 그렇지 않으면 불가능합니다. – tenfour
당신은'class T {operator T * ({return this; }};'? 그러나 나는 이것이 유용하거나 권장할만한 상황을 생각하기 위해 애 쓰고있다. –
의미가 없습니다. 객체는 할당 방법을 결정하지 않으므로 특정 방식으로 할당을 해제하는 논리가 없어야합니다. –