需要注意的问题(当数据成员函数指针型变量,需要申请空间赋值时)
1.构造函数
①需要给空指针申请一个‘\0’的空间
2.拷贝构造函数
①传入的参数,必须引用传递否则会出现无休止的拷贝构造
②对其参数值不做修改,传入的参数需要加const
③避免浅拷贝的产生,每次拷贝构造,都重新申请空间赋值。
3.赋值=
①需要返回引用型变量,否则会再返回值时,创建临时对象,又会无休止的拷贝构造
②对其参数值不做修改,传入的参数需要加const
③最重要先判断是否是给自己赋值,如果是,直接返回
④为考虑到异常安全,此时采用拷贝构造一个 参数(n) 的 临时对象(temp) ,来交换他们指针所指向的空间,在出此作用域后,临时对象就会释放。
4.析构
①如果有派生类,需要将析构函数声明为虚函数,来避免内存泄漏。
#include <iostream>
using namespace std;class Node
{
public:Node(const char*str="",int a = 0):m_a(a){if (str == NULL){m_p = new char[1];m_p[0] = '\0';}else{m_p = new char[strlen(str)+1];strcpy(m_p, str);m_p[strlen(str)] = '\0';}}Node(const Node& n){int len = strlen(n.m_p);m_p = new char[len + 1];strcpy(m_p,n.m_p);m_a = n.m_a;}Node& operator=(const Node& n){if (this != &n){Node temp(n);char* temp_str = temp.m_p;temp.m_p = m_p;m_p = temp_str;m_a = n.m_a;}return *this;}virtual ~Node(){delete m_p;}
private:char* m_p;int m_a;
};int main()
{Node a("abcd",10);Node b(a);Node c;c = a;
}

转载于:https://www.cnblogs.com/single-dont/p/11379488.html

构造、拷贝构造、赋值、析构相关推荐

  1. C++ 有参构造 无参构造 拷贝构造 以及参数化列表 成员对象之间的执行关系

    #include <iostream> #include <string> using namespace std; class Phone { public:string m ...

  2. E. 手机服务(构造+拷贝构造+堆)

    题目描述设计一个类来实现手机的功能.它包含私有属性:号码类型.号码. 号码状态.停机日期:包含方法:构造.拷贝构造.打印.停机. 1.号码类型表示用户类别,只用单个字母,A表示机构,B表示企业 .C表 ...

  3. C++之拷贝构造、拷贝赋值

    拷贝构造 class Stu{public:int no;string name;int age; public:Stu(int no=10086, string name="jin&quo ...

  4. 拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

     1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: ...

  5. c/c++教程 - 2.4.2.1~2 对象的初始化和清理,构造函数和析构函数,构造函数的分类和调用(有参构造,无参构造,普通构造,拷贝构造,括号法,显示法,隐式转换法,匿名对象)

    目录 4.2 对象的初始化和清理 4.2.1 构造函数和析构函数 4.2.2 构造函数的分类及调用 相关教程 4.2 对象的初始化和清理 生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候 ...

  6. 类和对象—对象特性—拷贝构造函数调用时期

    C++中拷贝构造函数通常有三种情况 使用一个已经建立完毕的对象来初始化一个新对象 值传递的方式给函数参数传值 以值方式返回局部对象 #include <iostream> using na ...

  7. 侯捷-C++面向对象高级开发(三大函数:拷贝构造,拷贝赋值,析构)

    侯捷-C++面向对象高级开发(三大函数:拷贝构造,拷贝赋值,析构) 三大函数:拷贝构造,拷贝赋值,析构 第一个是拷贝构造,第二个是拷贝赋值 编译器有一套默认的东西实现这俩东西,可用到complex的实 ...

  8. 侯捷C++->三大函数:拷贝构造、拷贝赋值、析构

    1.拷贝:如果类里带指针不能使用编译器给的那套赋值,仅仅是多了一个指针指向相同的内存(浅拷贝).(指针指向的内容不属于对象本身) 如果类带有指针,big three一定要写 2.拷贝构造:构造函数(函 ...

  9. C++之Big Three:拷贝构造、拷贝赋值、析构函数探究

    涉及到本文所讲知识点的博文: C++之析构函数探究 C++之常引用和浅拷贝探究 C++之一个函数链的简单例子(分文件实现) C++之Big Three:拷贝构造.拷贝赋值.析构函数探究 C++之操作符 ...

最新文章

  1. SQL Server 跨数据库事务
  2. Android-可自动缩小字体的TextView
  3. “新内容 新交互”全球视频云创新挑战赛复赛启幕
  4. java replaceall删除中括号和内容_「技术文章」《阿里巴巴 Java 开发手册》精华摘要...
  5. 计算机专业答辩模板,论文答辩模板-计算机专业.ppt
  6. 企业级应用架构(一) 三层架构之解耦
  7. 搭建nfs,实现linux之间共享存储
  8. 一步一步学习Servlet中Request和Response
  9. java hbase 例子,java操作hbase例子
  10. React实战入门课程:dva开发一个cnode网站(3)
  11. 仿IBM首页焦点图,缩略图大图,带文字
  12. git 版本控制~ 文件没有绿色和红色图标
  13. 使用userscript扩展浏览器插件
  14. CVPR 2021 | 腾讯优图20篇论文入选,含人脸识别、时序动作定位、视频动作分割等领域...
  15. vs2015设置c语言,VS2015的使用
  16. 鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一)
  17. fMRI之dpabi处理经验(一)
  18. c++ emplace_back和push_back的异同
  19. HTML/CSS 知识点解析
  20. 魔力鸭linux驱动下载,魔力鸭原厂2108s固件

热门文章

  1. 微服务feignclient_微服务-(声明式调用feign)
  2. 寻找唯一特等奖java,大工斩获唯一特等奖!这次,请为我工老师疯狂打call!
  3. 2021葫芦岛市第六高级中学高考成绩查询,葫芦岛高考成绩查询
  4. zigbee传输速率_wifi智能开关和zigbee智能开关有哪些区别
  5. 深度学习tensorflow框架的会话
  6. 一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛,n年后有多少头小牛
  7. [Visual Studio+TFS--强大的项目管理工具]
  8. 2019计算机B级考试题,【资格考试】2019最新整理-计算机等级考试一级B考试题分析.pdf...
  9. 使用solr构建hbase二级索引
  10. python学习笔记(十三)标准库heapq