C++笔记(11):拷贝控制(拷贝移动,构造赋值,析构)

控制对象拷贝,赋值,析构

  拷贝构造函数,移动构造函数

  拷贝赋值运算符,移动赋值运算符

  析构函数

-------------------------------------------------------------------------------------------------------------------------------------

1. 拷贝构造函数:参数必须是引用类型&,一般是const的

拷贝构造函数的第1个参数指的是对于自身类类型的引用

2.拷贝赋值运算符:本质是运算符函数重载

3.析构函数:释放和销毁对象,无返回值

使用“=default”来显示的要求编译器生成合成版本的拷贝构造函数、拷贝赋值运算符、析构函数

 阻止拷贝:1)定义删除的函数:拷贝构造函数、拷贝赋值运算符使用“=delete”

     2)析构函数不能是删除的成员

     3)private拷贝控制:拷贝构造函数、拷贝赋值运算符使用“private”

 对象移动:对于某些拷贝后就销毁的对象,移动而非拷贝会大幅度提高性能

      新标准为了支持移动操作,引入了新的引用类型:右值引用:&&

     右值引用只能绑定到一个即将被销毁的对象上面:int &&r=42;右值引用(int &r=i 是一般的左值引用)

      或者使用标准移动函数move():int &&r=move(r1);

时间: 2024-08-27 18:30:27

C++笔记(11):拷贝控制(拷贝移动,构造赋值,析构)的相关文章

Effective C++_笔记_条款09_绝不在构造和析构过程中调用virtual函数

(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 为方便采用书上的例子,先提出问题,在说解决方案. 1 问题 1: class Transaction{ 2: public: 3: Transaction(); 4: virtual void LogTransaction() const = 0 ; 5: ... 6: }; 7:  8: Transaction::Transaction() //Base cl

拷贝控制——拷贝、赋值与销毁

当定义一个类时,我们显示地或隐式地指定在此类型的对象拷贝.移动.赋值和销毁时做什么.一个类通常定义五种特殊的成员函数来控制这些操作,包括:拷贝构造函数.拷贝赋值运算符.移动构造函数.移动赋值运算符和析构函数.拷贝和移动构造函数定义了当用同类型的另一个对象初始化本对象时做什么.拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么.析构函数定义了当此类型对象销毁时做什么.我们称这些操作为拷贝控制操作. 如果一个类没有定义这些拷贝控制成员,编译器会自动为它定义缺失的操作.但是,对一些类来

NO.5: 了解C++编译器默认为你生成的构造/赋值/析构

1.编译器可以暗自位class生成default构造,copy构造,copy assigned函数,析构函数; note1:如果没有自定义构造函数,编译器会为你生成合成默认构造函数.如果有定义则不生成 note2:如果没有定义copy构造和copy assigned函数,编译器也会为你生成合成默认的,注意点:如果成员变量有引用或者const成员,需要自定义copy assigned函数(C++不允许"reference value 改变指向对象,所以编译器拒绝执行合成默认copy assigne

《C++ Primer》读书笔记—第十三章 控制拷贝

声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程 第III部分,类设计者的工具 1.类是C++的核心概念.每个类都定义了一个新类型和在此类型对象上可执行的操作. 2.当定义一个类时,我们显式或隐式地指定在此类型的对象的拷贝.移动.赋值和销毁时做什么.一个类通过定义五种特殊的成员函数来控制这些操作,包括:拷贝构造函数(copy construcor),拷贝赋值运算符(copy-assignment operato

C++ Primer 笔记——拷贝控制

1.如果构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数.拷贝构造函数的第一个参数必须是引用类型(否则会无限循环的调用拷贝构造函数). 2.如果没有为一个类定义拷贝构造函数,编译器会为我们定义一个合成拷贝构造函数.与合成默认构造函数不同,即使我们定义了其他的构造函数,编译器也会为我们合成一个拷贝构造函数. 3.合成的拷贝构造函数会将其参数的成员逐个拷贝到正在创建的对象中(除了static成员).对于类类型的成员,会使用其拷贝构造函数来拷贝,虽然我们不能

C++11(12):拷贝控制

拷贝构造函数的第一个参数必须是引用类型,此参数几乎总是const的引用.拷贝构造函数在几种情况下会隐式地使用.因此,拷贝构造函数不应该是explicit的 即使我们定义了其他构造函数,在没有拷贝构造函数时,编辑器也会为我们合成的.编辑器从给定对象中依次将每个非static成员拷贝到创建的对象中.每个成员决定了它使用何种方式进行拷贝.类调用拷贝构造函数,数组逐个拷贝,内置类型直接拷贝 string dots(10,'.')  //直接初始化 string noll_book="999999&quo

C++ Primer笔记9_构造函数_拷贝构造(深拷贝与浅拷贝)

1.构造函数: >构造函数是一个特殊的.与类同名的成员函数,用于给每一个成员设置适当的初始值. >构造函数不能有返回值,函数名与类名同样. >缺省构造函数时,系统将自己主动调用该缺省构造函数初始化对象,缺省构造函数会将全部数据成员都初始化为零或       空.缺省构造函数是不带參数的构造函数. >创建一个对象时,系统自己主动调用构造函数. 构造函数的特点: 1.构造函数能够重载,传入什么实參决定调用不同版本号的构造函数. 2.构造函数不能声明为const .也不能声明为virtu

C++学习之构造函数和拷贝控制--什么样的情况下才需要虚析构函数

什么样的情况下才需要虚析构函数? 类需要控制自己的对象执行一系列操作时发生什么样的行为,这些操作包括:创建(对象).拷贝.移动.赋值和销毁.在继承体系中,如果一个类(基类或其派生的类)没有定义拷贝控制操作,则编译器将自动的为其合成一个.即为合成的拷贝控制. 在基类的拷贝控制中,由于继承关系导致的最大影响就是:基类通常应该定义一个‘虚析构函数’.用以动态的分配继承体系中的对象. 如:类A,B,C,D有如下继承关系(代码1): 1 2 3 4 class A; class B:public A; c

C++中类的拷贝控制 与之相关的几个函数

转自:http://www.cnblogs.com/ronny/p/3734110.html 对于部分内容会在接下来的文章中详细介绍 1,什么是类的拷贝控制 当我们定义一个类的时候,为了让我们定义的类类型像内置类型(char,int,double等)一样好用,我们通常需要考下面几件事: Q1:用这个类的对象去初始化另一个同类型的对象. Q2:将这个类的对象赋值给另一个同类型的对象. Q3:让这个类的对象有生命周期,比如局部对象在代码部结束的时候,需要销毁这个对象. 因此C++就定义了5种拷贝控制