我希望讓我的Class1的一個類型轉換操作符可以轉換成等級2:C++類型轉換操作符和內存泄漏
class Class1 {
public:
operator Class2() const {
//....
}
}
但是,如果我在操作執行創建Class2中的對象,很有可能它會不會被調用者刪除。那麼實現這種功能的最佳方式是什麼?
我希望讓我的Class1的一個類型轉換操作符可以轉換成等級2:C++類型轉換操作符和內存泄漏
class Class1 {
public:
operator Class2() const {
//....
}
}
但是,如果我在操作執行創建Class2中的對象,很有可能它會不會被調用者刪除。那麼實現這種功能的最佳方式是什麼?
目前僅需要刪除的,如果你不喜歡這樣的東西瘋狂:
operator Class2() const
{
Class2 *p = new Class2();
...
return *p;
}
然而,以下是罰款:
operator Class2() const
{
Class2 c2;
...
return c2;
}
堆上你不應該分配內存,但做的Class2在堆棧中。然後它將在函數退出時被銷燬。
你應該做這樣的事情
operator Class2() const
{
Class2 tmp;
...
return tmp;
}
然後,如果你有這樣的事情
Class1 c1;
Class2 c2 = c1;
爲tmp
內存將在堆棧中分配,那麼Class2
拷貝構造函數會被稱爲將tmp
複製到c2
,然後tmp
的析構函數將被調用,因爲它是一個自動變量。
那麼,第一個片段甚至不會編譯,因爲您返回Class2 *而不是Class2本身。 –
@伊萬:不,我不是! –
哎呀,對不起,我不注意。沒有注意到解除引用。 –