Netbeans在c ++中创建了一个默认构造函数。它有什么作用?

时间:2013-06-28 07:25:50

标签: c++ netbeans constructor

Netbeans创建了这个默认构造函数。我很好奇它的目的是什么。我不知道该怎么称呼它或它做什么。这更像是一种好奇心。我唯一想到的可能就是克隆?有些东西告诉我,我错了。

#ifndef     FOO_H
#define FOO_H

class Foo {
public:
    Foo();
    Foo(const Foo& orig);
    virtual ~Foo();
private:

};

2 个答案:

答案 0 :(得分:2)

是Netbeans已经明确地创建了默认和复制构造函数。

它还为您提供了一个虚拟析构函数,以帮助您在继承此类时避免内存泄漏(将BabyFoo视为Foo的子类):如果您编写Foo* foo = new BabyFoo(); delete foo;,那么您将泄漏内存作为除非Foo有虚拟析构函数,否则不会删除BabyFoo中的成员数据。

我不喜欢Netbeans的做法,因为:

1)我认为复制构造函数很难维护(很容易忘记复制新添加的成员数据),如果不需要显式复制成员数据,则无需提供复制构造函数(裸指针数据)可能需要明确复制)。编译器自动生成的那个将(浅)复制所有成员数据。

2)虚拟析构函数将一个虚函数指针表引入到您的类中,这是一个开销。

3)承认Oli Charlesworth的评论:http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming)

答案 1 :(得分:0)

Foo(const Foo& orig); 

这是复制构造函数,每个类都有一个由编译器提供的默认复制构造函数

目的是创建现有对象的副本

有关复制构造函数的详细信息,请参阅http://en.wikipedia.org/wiki/Copy_constructor