0
是否可以爲返回一個指針的類編寫一個轉換函數,哪個也可以被刪除表達式用來刪除我的對象?如果是這樣,我該怎麼做?轉換函數刪除類對象?
是否可以爲返回一個指針的類編寫一個轉換函數,哪個也可以被刪除表達式用來刪除我的對象?如果是這樣,我該怎麼做?轉換函數刪除類對象?
要使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"
我假設你回來'this'?否則,這是不可能的。 – tenfour
你的意思是'class T {operator T *(){return this; }};'?但是,我很難想到這種情況是有用的或可取的。 –
沒有意義。一個對象不能決定它是如何分配的,所以它不應該公開任何邏輯來以任何特定的方式釋放它。 –