1

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

#ifndef     FOO_H
#define FOO_H

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

};
4

2 回答 2

2

是的,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)

于 2013-06-28T07:27:07.897 回答
0
Foo(const Foo& orig); 

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

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

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

于 2013-06-28T07:44:26.700 回答