和默认构造函数一样,当用户未显式定义复制构造函数时,编译器只有在某些条件下才会合成一个nontrivial的复制构造函数。所以,如果一个类未定义复制构造函数,编译器就自动为它产生出一个,这句话是错误的。下面主要讨论在哪些情况下,编译器才会自动合成一个复制构造函数。
如果有一个如下所示的类:
class Foo {
public:
int x, y;
};
那么编译器不...
分类:
其他好文 时间:
2014-05-22 08:17:35
阅读次数:
189
关于默认拷贝构造函数,有一点和默认构造函数类似,就是编译器只有在【需要的时候】才去合成默认的拷贝构造函数。在什么时候才是【需要的时候】呢?也就是类不展现【bitwise
copy semantics】时,即不展现【逐位次拷贝】时,才会合成默认拷贝构造函数。所谓的【逐位次拷贝】,也就是简单的赋值,不管...
分类:
编程语言 时间:
2014-05-20 08:07:10
阅读次数:
322
在new对象的时候有加上(),有不加(),不知道这个到底是什么区别?比如:CBase
*base = new CDerived();CBase *base = new
CDeviced;很多人都说,加括号调用没有参数的构造函数,不加括号调用默认构造函数或唯一的构造函数。这是有问题的。对于自定义类类型...
分类:
编程语言 时间:
2014-05-19 16:26:25
阅读次数:
498
1.基础知识/*可以定义大小是0的数组,但不能引用,因为没有指向任何对象new
string[10]调用类的默认构造函数new int[10]没有初始化,但new
int[10]()会将数组初始化成0,返回第一个元素的首地址*/#include #include using namespace st...
分类:
编程语言 时间:
2014-05-17 20:11:13
阅读次数:
316
首先,本篇文章只讲 “默认构造函数”,即如你所知,默认构造函数是不带参数的构造函数。
编译器会在 适当的时候 为class合成一个默认构造函数 ~~
先问以下两个问题:
编译器会为任何没有声明构造函数的class,合成默认构造函数?? 错!!!
合成的默认构造函数会显示设定class内的每一个data member的默认值?? 错!!!
class Base
{
public:
...
分类:
编程语言 时间:
2014-05-15 06:25:02
阅读次数:
270
默认构造函数,如果程序员没有为类定义构造函数,那么编译器会在【需要的时候】为类合成一个构造函数,而【需要的时候】分为程序员需要的时候和编译器需要的时候,程序员需要的时候应该由程序员来做工作,编译器需要的时候则由编译器来做工作。C++中,全局变量
/ 对象的内存会被清零(如果类对象没有程序员定义的构造...
分类:
编程语言 时间:
2014-05-14 11:23:09
阅读次数:
299
记录一下我对C++类构造函数的理解。首先,构造函数分成两种,默认构造函数和非默认构造函数(好吧,就这么叫它)。默认构造函数只能有一个,如果没有自定义构造函数,那么编译器将自动生成一个默认构造函数,当然这个构造函数不会做任何事情。如果程序定义了构造函数(包括默认和非默认),编译器都不再自动提供默认构造...
分类:
编程语言 时间:
2014-05-13 18:13:45
阅读次数:
289
缺省构造函数,又称默认构造函数,是C++以及其他的一些面向对象的程序设计语言中,对象的不需要参数即可调用的构造函数。下面将针对缺省构造函数的定义、使用、以及注意问题等方面简要探讨。1、缺省构造函数是怎样的形式?是如何定义的?
在C++的一个类中,如果构造函数没有参数,或者构造函数的所有参数都有默认....
分类:
编程语言 时间:
2014-05-12 09:30:38
阅读次数:
326
重载操作符与转换--自增/自减操作符引言: 自增,自减操作符经常由诸如迭代器这样的类实现,这样的类提供类似于指针的行为来访问序列中的元素。例如,可以定义一个类,该类指向一个数组并为该数组中的元素提供访问检查:class CheckedPtr
{
public:
//这个类没有默认构造函数,必须提供指向数组的指针。
/**构造函数的参数是两个指针:一个指向数组的开始,另一个指向...
分类:
编程语言 时间:
2014-05-08 08:09:00
阅读次数:
493
编译器会自动生成default constructor,这是真的吗? C++ standard中说明“对于class X,如果没有任何user-defined constructor,那么会有一个default constructor被隐式(implicitly)声明出来,一个被隐式声明出来的default constructor将是一个trivial(没啥用的)constructor。Nontrivial default constructor就是编译器需要的默认构造函数。下面主要看4种生成nontri...
分类:
其他好文 时间:
2014-05-04 08:40:18
阅读次数:
346