0

我希望讓我的Class1的一個類型轉換操作符可以轉換成等級2:C++類型轉換操作符和內存泄漏

class Class1  { 
public: 
    operator Class2() const { 
     //.... 
    } 
} 

但是,如果我在操作執行創建Class2中的對象,很有可能它會不會被調用者刪除。那麼實現這種功能的最佳方式是什麼?

回答

2

目前僅需要刪除的,如果你不喜歡這樣的東西瘋狂:

operator Class2() const 
{ 
    Class2 *p = new Class2(); 
    ... 
    return *p; 
} 

然而,以下是罰款:

operator Class2() const 
{ 
    Class2 c2; 
    ... 
    return c2; 
} 
+0

那麼,第一個片段甚至不會編譯,因爲您返回Class2 *而不是Class2本身。 –

+0

@伊萬:不,我不是! –

+0

哎呀,對不起,我不注意。沒有注意到解除引用。 –

0

堆上你不應該分配內存,但做的Class2在堆棧中。然後它將在函數退出時被銷燬。

0

你應該做這樣的事情

operator Class2() const 
{ 
    Class2 tmp; 
    ... 
    return tmp; 
} 

然後,如果你有這樣的事情

Class1 c1; 
Class2 c2 = c1; 

tmp內存將在堆棧中分配,那麼Class2拷貝構造函數會被稱爲將tmp複製到c2,然後tmp的析構函數將被調用,因爲它是一個自動變量。