假设我有这个基本的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); }
}
答案 0 :(得分:9)
这个程序中是否有内存泄漏?
不,没有动态分配,所以没有泄漏。
初始化类似
的类是一个好习惯
不,这很奇怪而且令人困惑,而且技术上根本没有初始化(这是在首次声明变量时完成),而是重新分配。我很惊讶它编译,因为没有默认的构造函数。
或者喜欢像
这样的东西
不,那很奇怪。使用构造函数完成初始化:
Foo f(1,2);
同样重新分配
f = Foo(3,4);