2014-07-09 57 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);