Netbeans在c++中创建了一个默认构造函数.它做什么

Netbeans created a default constructor in c++. What does it do?

本文关键字:默认 一个 构造函数 什么 c++ 创建 Netbeans      更新时间:2023-10-16

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有关复制构造函数的更多详细信息

相关文章: