Netbeans在c++中创建了一个默认构造函数.它做什么
Netbeans created a default constructor in c++. What does it do?
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有关复制构造函数的更多详细信息
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个包含 c++ 默认值的环境文件
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 如何处理没有默认构造函数但在另一个构造函数中构造的对象?
- 如何在C++中提供模板化函数作为另一个函数的参数,默认值?
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- 如何设置默认参数以防用户不输入另一个参数
- 在 c++ 中,如果我创建一个接受一个具有默认值的参数的构造函数 - 它会用作默认(空)构造函数吗?
- 具有另一个具有默认值的模板参数的模板推导
- 如何仅覆盖一个EXPECT_CALL的默认ON_CALL操作,并在以后返回到默认操作
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- C++用一个新类初始化二维向量;默认值更改
- C++类的非默认构造函数是另一个类的成员?
- 使编译器为 std::function 生成一个空的默认函数
- C++使用默认的复制构造函数,即使用户使用模板定义了一个复制构造函数
- 构造一个没有默认构造函数的空对象
- 包括一个大标头以使用对象作为默认参数
- C 使用默认限制的迭代器创建一个空的std :: String
- 我可以在类主体中默认一个私有构造函数吗?