c/c++语言开发共享C++ 拷贝构造函数作用解析

1. 什么是拷贝构造函数(copy constructor) 拷贝构造函数首先是构造函数,和类同名,没有返回类型。 其次,它只有一个参数,类型为该类类型的引用,且通常为常量引用(const refe


1. 什么是拷贝构造函数(copy constructor)

拷贝构造函数首先是构造函数,和类同名,没有返回类型。

其次,它只有一个参数,类型为该类类型的引用,且通常为常量引用(const reference)。

c++有两种形式的初始化:直接初始化和复制初始化:

  string null_book = "9-999-99999-9"; // copy-initialization  string dots(10, '.');// direct-initialization    string empty_copy = string(); // copy-initialization  string empty_direct; // direct-initialization

为了创建 null_book,编译器首先调用string 以c-style string为参数的构造函数,创建一个临时对象,然后,调用拷贝构造函数复制这个临时对象到null_book变量。

  // copy constructor used to copy the return value;  // parameters are references, so they aren't copied  string make_plural(size_t, const string&, const string&);

由于参数是引用,不会调用拷贝构造函数进行复制,但返回时会调用string的拷贝构造函数,因为返回类型不是引用。

2. 拷贝构造函数的作用

用一个对象初始化另一个对象。 复制对象,并将它作为实参传给函数。 复制对象,并将它从函数返回。 初始化序列容器中的对象。 用元素初始化值列表初始化数组中的元素。

3. 合成的拷贝构造函数

如果类没有自定义的拷贝构造函数,编译器会帮忙合成一个。

4. 自定义拷贝构造函数

如果类有定义指针成员,或有成员代表了其他分配在构造函数中的资源() ,这种情况需要自定义构造函数,而不是让编译器来合成。

5. 阻止复制

绝大多数的类应该定义拷贝构造函数和默认构造函数。

但是一些类如io类型,不允许对象复制,因此,这些类将拷贝构造函数声明为私有,且只有声明,没有定义:如果用户使用,编译时出错,如果友元和成员函数使用,链接时出错。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/607395.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐