初级化课程&内存泄漏

时间:2014-07-09 15:20:22

标签: c++

假设我有这个基本的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);
}

这个程序有内存泄漏吗?初始化类似这样的类是一个好习惯,还是喜欢这样的类:

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

1 个答案:

答案 0 :(得分:9)

  

这个程序中是否有内存泄漏?

不,没有动态分配,所以没有泄漏。

  

初始化类似

的类是一个好习惯

不,这很奇怪而且令人困惑,而且技术上根本没有初始化(这是在首次声明变量时完成),而是重新分配。我很惊讶它编译,因为没有默认的构造函数。

  

或者喜欢像

这样的东西

不,那很奇怪。使用构造函数完成初始化:

Foo f(1,2);

同样重新分配

f = Foo(3,4);