Netbeans 创建了这个默认构造函数。我很好奇它的目的是什么。我不知道该怎么称呼它,也不知道它有什么作用。更多的是一种好奇。我唯一的想法可能是克隆?有些东西告诉我我错了。
#ifndef FOO_H
#define FOO_H
class Foo {
public:
Foo();
Foo(const Foo& orig);
virtual ~Foo();
private:
};
Netbeans 创建了这个默认构造函数。我很好奇它的目的是什么。我不知道该怎么称呼它,也不知道它有什么作用。更多的是一种好奇。我唯一的想法可能是克隆?有些东西告诉我我错了。
#ifndef FOO_H
#define FOO_H
class Foo {
public:
Foo();
Foo(const Foo& orig);
virtual ~Foo();
private:
};
是的,Netbeans 已经创建了显式创建的默认构造函数和复制构造函数。
它还为您提供了一个虚拟析构函数,以帮助您在从此类继承时避免内存泄漏(将 BabyFoo 视为 Foo 的子类):如果您编写Foo* foo = new BabyFoo(); delete foo;
,那么您将泄漏内存,因为 BabyFoo 中的成员数据不会被删除除非 Foo 有一个虚拟析构函数。
我不喜欢 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