C++编译器何时提供默认的构造函数和拷贝构造函数 .
来源:互联网 发布:hololens 用mac开发 编辑:程序博客网 时间:2024/05/28 05:15
注意:默认构造函数并不是一定会生成的
如:
class A
{
public:
int f() const {}
};
class B : public A
{
public:
int f() {}
};
A和B都没有生成默认构造函数,直接导致
const A a;
const B b;
出现如下错误:
uninitialized const `a'
uninitialized const `b'
总的来说,编译器只在它需要的时候才会合成一个默认构造函数,或者扩张所有已存在的构造函数。
一个类满足下列其中任何一个条件:
1.包含了一个类的对象,这个对象有一个构造函数(包括编译器合成的默认构造函数)
(在class A中增加一个string str即可)
2.如果继承自一些基类,其中某些基类有一个构造函数(包括编译器合成的默认构造函数)
(在class A中增加一个构造函数,B中就会自动生成默认构造函数)
3.有一个虚函数,或者继承到了虚函数
4.有虚基类
关于合适会生成默认构造函数,请看下面的说明:
如果这个类没有默认的构造函数,编译器就会合成一个默认的构造函数,分别做以下事情
如果这个类有构造函数,编译器就会扩张所有构造函数,做以下事情
1.调用这个对象的构造函数
2.调用基类的构造函数
3.设置正确的虚函数表指针
4.设置指向虚基类对象的指针
如果一个类不满足上面的4个条件,并且没有提供构造函数,编译器也不会为这个类提供默认的拷贝构造函数。
拷贝构造函数类似,对于1,2,判断是否有拷贝构造函数,并调用拷贝构造函数,3,4相同。
但有一点截然不同,即使一个类不满足以上4个条件,并且类没有提供拷贝构造函数,编译器也会合成一个默认的拷贝构造函数,它用字节拷贝的方式拷贝对象。
如:
class A
{
public:
int f() const {}
};
class B : public A
{
public:
int f() {}
};
A和B都没有生成默认构造函数,直接导致
const A a;
const B b;
出现如下错误:
uninitialized const `a'
uninitialized const `b'
总的来说,编译器只在它需要的时候才会合成一个默认构造函数,或者扩张所有已存在的构造函数。
一个类满足下列其中任何一个条件:
1.包含了一个类的对象,这个对象有一个构造函数(包括编译器合成的默认构造函数)
(在class A中增加一个string str即可)
2.如果继承自一些基类,其中某些基类有一个构造函数(包括编译器合成的默认构造函数)
(在class A中增加一个构造函数,B中就会自动生成默认构造函数)
3.有一个虚函数,或者继承到了虚函数
4.有虚基类
关于合适会生成默认构造函数,请看下面的说明:
如果这个类没有默认的构造函数,编译器就会合成一个默认的构造函数,分别做以下事情
如果这个类有构造函数,编译器就会扩张所有构造函数,做以下事情
1.调用这个对象的构造函数
2.调用基类的构造函数
3.设置正确的虚函数表指针
4.设置指向虚基类对象的指针
如果一个类不满足上面的4个条件,并且没有提供构造函数,编译器也不会为这个类提供默认的拷贝构造函数。
拷贝构造函数类似,对于1,2,判断是否有拷贝构造函数,并调用拷贝构造函数,3,4相同。
但有一点截然不同,即使一个类不满足以上4个条件,并且类没有提供拷贝构造函数,编译器也会合成一个默认的拷贝构造函数,它用字节拷贝的方式拷贝对象。
- C++编译器何时提供默认的构造函数和拷贝构造函数
- C++编译器何时提供默认的构造函数和拷贝构造函数 .
- C++构造与析构(14) - 编译器何时创建默认构造函数和拷贝构造函数
- C++编译器何时为用户提供默认构造函数
- C++编译器何时为用户提供默认构造函数
- C++编译器何时为用户提供默认构造函数
- C++编译器何时为用户提供默认构造函数
- 编译器何时调用默认构造函数
- 浅拷贝——C++编译器默认提供的拷贝构造函数
- C++何时才提供默认构造函数
- 默认构造函数和拷贝构造函数
- 默认构造函数和拷贝构造函数
- C++编译器提供默认构造函数的几种情况
- 编译器提供默认构造函数的几种情况
- 何时调用C++复制构造函数和拷贝构造函数
- 何时调用C++复制构造函数和拷贝构造函数
- C++编译器合成默认构造函数的条件(合成默认拷贝构造函数雷同)
- 何时调用拷贝构造函数
- 堕落,迷失,绝望
- 基督,为全人类救赎上十字架, 死而复活 然后成就救赎
- 四川调整村卫生室一般诊疗费标准按5元收取-四川-村卫生室-收费
- n级阶梯,每次走一步或两步,问最多有多少种走法
- 笔试题总结0003
- C++编译器何时提供默认的构造函数和拷贝构造函数 .
- metasploit用户接口
- hishop6.0授权破解教程
- cvCreateImageHeader,cvCreateImage
- 类中成员变量在内存中的分布是怎样的?---2
- mmap内存映射/dev/mem到用户空间
- android 相对定位布局方向 RelativeLayout
- .net 程序集自动生成版本号
- 新开始,第一个MFC程序