Netbeans创建了这个默认构造函数。我很好奇它的目的是什么。我不知道该怎么称呼它,也不知道它做什么。这更多的是一种好奇。我唯一的想法也许是克隆?告诉我错了。
#ifndef FOO_H
#define FOO_H
class Foo {
public:
Foo();
Foo(const Foo& orig);
virtual ~Foo();
private:
};
Yes 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)
Foo(const Foo& orig);
这是复制构造函数,每个类都有一个默认的复制构造函数,由编译器提供
目的是创建现有对象的副本
请参阅http://en.wikipedia.org/wiki/Copy_constructor有关复制构造函数的更多详细信息