Netbeans创建了这个默认构造函数。我很好奇它的目的是什么。我不知道该怎么称呼它或它做什么。这更像是一种好奇心。我唯一想到的可能就是克隆?有些东西告诉我,我错了。
#ifndef FOO_H
#define FOO_H
class Foo {
public:
Foo();
Foo(const Foo& orig);
virtual ~Foo();
private:
};
答案 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