2014-07-09 56 views
-2

假設我有這個基本的C++類:類和內存的初始化泄漏

class Foo 
{ 
    public: 
     void Foo() {m_a=0; m_b=0;} 
     void Foo(int a, int b) 
     { 
      m_a=a; 
      m_b=b; 
     } 

     void setA(int a) {m_a=a;} 
     void setB(int b) {m_b=b;} 

     static void init(int a, int b, Foo* foo) 
     { 
      if(foo) *foo = Foo(a, b); 
     } 

    private: 
     int m_a; 
     int m_b; 
}; 

,並在我的主類我做的:

int main() 
{ 
    Foo f; 
    Foo::init(1, 2, &f); 
    Foo::init(1, 2, &f); 
    Foo::init(1, 2, &f); 
} 

有沒有在這個程序中的內存泄漏?它是一個很好的做法,初始化類一樣,或者是preferrable一樣的東西:

static void init(int a, int b, Foo* foo) 
{ 
    if(foo){ foo->setA(a); foo->setB(b); } 
} 
+0

你嘗試編譯代碼:初始化與構造做了什麼? – Svalorzen

+2

你沒有動態分配任何東西(使用'new'或'malloc'),所以沒有什麼可以釋放的(使用'delete'或'free'')。所以,沒有泄漏。 – juanchopanza

+0

這裏應該泄漏什麼?我找不到任何一個'new()',也沒有任何間接使用它的類。 –

回答

9

有沒有在這個程序中的內存泄漏?

不,沒有動態分配,所以沒有泄漏。

它是一個很好的做法,初始化類像

不,那是相當怪異和混亂,並在所有技術上沒有初始化(當變量首先聲明這是做),但重新分配。我很驚訝它編譯,因爲沒有默認的構造函數。

或preferrable像

不,那只是怪異。

Foo f(1,2); 

和再分配同樣

f = Foo(3,4);