类的初始化&;内存泄漏 假设我有这个基本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; };

类的初始化&;内存泄漏 假设我有这个基本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; };,c++,C++,在我的主要课程中,我会: 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

在我的主要课程中,我会:

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);

您是否尝试编译代码?您没有动态分配任何内容(使用
new
malloc
),因此无需发布任何内容(使用
delete
free
)。那么,没有泄漏。这里应该泄漏什么?我找不到任何一个
new()
,也找不到任何间接使用它的类?@Holt:我知道我能做
Foo f(1,2)