拷贝构造函数

简介: 拷贝构造函数

一、什么是拷贝构造函数?


1.1 浅拷贝


先来了解点预备知识,浅拷贝。所谓浅拷贝,指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷


1.2 拷贝构造函数


拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象


如果没有构造函数,会自动定义,如果有指针变量且带有动态内存分配就必须自己写一个。

    classname(const classname &obj)
    {
    }

二、在哪里使用到拷贝函数?


  1. 作为参数传递给函数
  2. 对象需要通过另外一个对象进行初始化
  3. 从函数返回对象


2.1 作为参数传递给函数

void display(ClassName obj)
{
   cout << "Length of line : " << obj.getLength() <<endl;
}

注解:当对象作为参数传递过来的时候,先产生一个temp对象,调用拷贝构造函数,当作用域结束的时候(就是函数结束),调析构。


2.2 对象需要通过另外一个对象进行初始化


Line line1(10);
   Line line2 = line1; // 这里也调用了拷贝构造函数


2.3 从函数返回对象


//全局函数  
CExample g_Fun()  
{  
 CExample temp(0);  
 return temp;  
}


(1). 先会产生一个临时变量,就叫XXXX吧。

(2). 然后调用拷贝构造函数把temp的值给XXXX。整个这两个步骤有点像:CExample XXXX(temp);

(3). 在函数执行到最后先析构temp局部变量。

(4). 等g_Fun()执行完后再析构掉XXXX对象。


特别注意: 当我使用gcc进行编译的时候发现,返回对象自动调用复制拷贝函数的机制没有执行,经过查阅资料发现是由于gcc具有返回值优化,我们要看见结果只需要在编译时候加入参数:-fon-elide-constructors

    g++ -fon-elide-constructors main.cpp


相关文章
|
6月前
|
C++
C++中拷贝构造会出现的情况
C++中拷贝构造会出现的情况
32 3
|
6月前
|
存储 编译器 C++
【c++】拷贝构造函数
【c++】拷贝构造函数
【c++】拷贝构造函数
|
6月前
拷贝构造函数与移动构造函数
拷贝构造函数与移动构造函数
79 0
4.【拷贝构造函数与重载】
4.【拷贝构造函数与重载】
37 1
|
编译器
拷贝构造函数和运算符重载(下)
拷贝构造函数和运算符重载(下)
|
存储 编译器 C++
拷贝构造函数和运算符重载(上)
拷贝构造函数和运算符重载(上)
|
编译器 C++
【C++】-- 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数(一)
【C++】-- 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数
【C++】-- 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数(一)
|
编译器 C++
【C++】-- 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数(二)
【C++】-- 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数
【C++】-- 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数(二)
|
编译器 C++
【C++】-- 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数(三)
【C++】-- 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数
113 0
【C++】-- 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数(三)