2011-11-21 68 views
0

是否可以爲返回一個指針的類編寫一個轉換函數,哪個也可以被刪除表達式用來刪除我的對象?如果是這樣,我該怎麼做?轉換函數刪除類對象?

+1

我假設你回來'this'?否則,這是不可能的。 – tenfour

+1

你的意思是'class T {operator T *(){return this; }};'?但是,我很難想到這種情況是有用的或可取的。 –

+2

沒有意義。一個對象不能決定它是如何分配的,所以它不應該公開任何邏輯來以任何特定的方式釋放它。 –

回答

1

要使X工作,X必須是原始對象的類型(或共享基類型w /虛擬析構函數)。所以通常情況下,你永遠不需要這樣的操作符,因爲它只有在你進行隱式強制轉換時纔會有效,不需要轉換操作符。

而對於其他任何答案都是有效的「否」。

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"