类和内存泄漏的初始化

Initialization of a class & memory leak

本文关键字:初始化 泄漏 内存      更新时间:2023-10-16

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

程序中是否存在内存泄漏?

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

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

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

或者像

这样的东西更好

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

Foo f(1,2);

和重赋同样

f = Foo(3,4);