类和内存泄漏的初始化
Initialization of a class & memory leak
假设我有这个基本的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);
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- HBOEHM 垃圾回收器未初始化的值错误和泄漏
- 使用初始值设定项列表的初始化类成员会导致内存泄漏
- 在类构造函数中初始化映射时,如何避免内存泄漏
- 类和内存泄漏的初始化
- C++函数初始化和内存泄漏
- valgrind条件跳转或移动取决于未初始化的值,这是否表示内存泄漏
- 初始化const-char*,去掉任何内存泄漏
- 从动态分配的解引用指针默认初始化非const引用函数参数是否会造成内存泄漏?