1. 声明是告诉编译器某个东西的类型和名称,但略去细节。定义则需要提供细节。 2. size_t 是一个 typedef ,是 C++计算个数时用的某种不带正负号的类型。 3. 初始化是给予对象初值的过程。对于用户自定义的对象,初始化由构造函数执行。 4. explicit 可以防止构造函数执行隐式 ...
分类:
其他好文 时间:
2020-02-09 18:28:21
阅读次数:
61
编译器自带拷贝构造(ctor)和拷贝赋值函数(operator =), 但是对于成员变量含有指针的类,其不能使用默认的拷贝赋值函数。因为使用默认的,会直接将指针指向的地址进行赋值 (浅拷贝,共享内存,共指一个对象),而不是分配一块内存,具有相同的数值 (深拷贝,独立,两个对象)。 浅拷贝容易造成da ...
分类:
其他好文 时间:
2020-02-07 01:09:04
阅读次数:
93
//有些情况下,想要明确地拒绝对象之间的拷贝,可以采用两种方式: //方式1: 将拷贝构造函数和赋值操作声明为private,且不去实现 class A { private: A(const A&); A& operator=(const A&); }; int main() { A a1; //报 ...
分类:
其他好文 时间:
2020-01-28 19:21:23
阅读次数:
55
【1】std::move 在C++11中,标准库在<utility>中提供了一个有用的函数std::move。 这个函数的名字很具有迷惑性,因为实际上std::move并不能移动任何东西,它唯一的功能:将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。 从实现上讲,std: ...
分类:
编程语言 时间:
2020-01-27 09:37:06
阅读次数:
99
【1】为什么引入移动语义? 拷贝构造函数中为指针成员分配新的内存再进行内容拷贝的做法在C++编程中几乎被视为是最合理的。 不过在有些时候,我们会发现确实不需要这样的拷贝构造语义。如下示例: 1 #include <iostream> 2 using namespace std; 3 4 class ...
分类:
移动开发 时间:
2020-01-26 10:24:34
阅读次数:
108
【1】浅拷贝 一直以来,设计一个类,个人认为,最能体现水平的地方在于:类中含有指针成员变量。 如下一个典型的浅拷贝示例: 1 #include <iostream> 2 using namespace std; 3 4 class HasPtrMem 5 { 6 public: 7 HasPtrMe ...
分类:
编程语言 时间:
2020-01-25 23:42:19
阅读次数:
164
c++对象初始化 就是去调用构造函数来完成初始化操作; 构造函数有无参数的构造函数、有参数构造函数、默认构造函数(编译器给我们实现的)...(拷贝构造函数之后说) 注意:默认构造函数只有在我们自己没有声明构造函数时编译器才会给我们制造一个没有参数的构造函数,如果我们定义了,编译器就不会管了 例子:看 ...
分类:
编程语言 时间:
2020-01-17 10:22:02
阅读次数:
91
原型模式 原型模式 ,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 说白点就是,使用原型模式可以很便捷的创建一个原型出来,之后再拷贝它,并可以对拷贝出来的东西进行修改。 原型模式原本的意思是, 先构造原型,再拷贝(也就是不用构造),从而说原型模式提高了效率。 但写完代码后发现,如 ...
分类:
其他好文 时间:
2020-01-12 17:54:15
阅读次数:
62
总结出来的几种构造参数。 1) 默认构造函数。就是编译器自动生成的构造函数。以 Complex 类为例,它的原型为: Complex(); //没有参数 2) 普通构造函数。就是用户自定义的构造函数。以 Complex 类为例,它的原型为: Complex(double real, double i ...
分类:
编程语言 时间:
2019-12-30 22:48:15
阅读次数:
103
以拷贝的方式初始化对象 初始化对象时会调用构造函数,不同的初始化方式会调用不同的构造函数: 如果用传递进来的实参初始化对象,那么会调用普通的构造函数,我们不妨将此称为普通初始化; 如果用其它对象(现有对象)的数据来初始化对象,那么会调用拷贝构造函数,这就是以拷贝的方式初始化。 对于简单的类,默认的拷 ...
分类:
编程语言 时间:
2019-12-30 22:46:20
阅读次数:
105