初始化类和内存泄漏

ABC*_*lus -2 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;
};
Run Code Online (Sandbox Code Playgroud)

在我的主要班级我做:

int main()
{
    Foo f;
    Foo::init(1, 2, &f);
    Foo::init(1, 2, &f);
    Foo::init(1, 2, &f);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mik*_*our 9

这个程序有内存泄漏吗?

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

初始化这样的类是一个好习惯

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

或者是喜欢的东西

不,那就像怪异一样.使用构造函数完成初始化:

Foo f(1,2);
Run Code Online (Sandbox Code Playgroud)

并重新分配

f = Foo(3,4);
Run Code Online (Sandbox Code Playgroud)