• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++ 构造函数中使用new时注意事项

C++ 构造函数中使用new时注意事项

作者:xdzhanght 字体:[增加 减小] 来源:互联网 时间:2017-05-28

xdzhanght 通过本文主要向大家介绍了c++构造函数,c++拷贝构造函数,c++构造函数初始化,c++复制构造函数,c++默认构造函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

使用new初始化对象中的指针成员时遇到的问题

在构造函数中使用new初始化指针成员,那么析构函数中就必须使delete,并且new对应delete, new[]则对应于delete[]。

在有多个构造函数的情况下,必须以相同的方式使用new,要不用new,要不用new[],因为只存在一个析构函数,所有的构造函数都必须与虚构函数相兼容。

PS. 当然在构造函数中使用new初始化指针的时候,可以把指针初始化为空(0/NULL 或者是C++11中的nullptr),因为delete不管有没带[]都与空指针兼容。

需要自行定义一个复制构造函数和赋值构造函数,用深复制的方式把一个对象初始化给另一个对象,一个对象复制给另一个对象,如下:

复制构造函数:

  • 分配足够空间存储复制的数据
  • 复制数据,不仅仅地址
  • 更新受到影响的静态类成员
String:String(const String & st)
{
  num_Strings++;
  len = st.len;
  str = new char[len+1];
  std::strcpy(str,st.str);
}
</div>

赋值构造函数:

  • 检查自我复制情况
  • 释放成员指针之前指向内存
  • 复制数据不仅仅地址
  • 返回一个指向调用对象的引用
String & String:operator=(const String & st)
{
  if(this == &st)
    return *this;
  else
    delete [] str;
    len = st.len;
    str = new char[len+1];
    std::strcpy(str,st.str);
  return *this;
}
</div>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 构造函数中使用new时注意事项
  • C++ 赋值构造函数注意点介绍
  • 关于C++中构造函数初始化成员列表的总结
  • C++ 初始化列表详解及实例代码
  • c++ 构造函数中调用虚函数的实现方法
  • C++ 类的构造函数详解及实例
  • C++构造函数深度学习
  • C++使用WideCharToMultiByte函数生成UTF-8编码文件的方法
  • C++聚合关系类的构造函数的调用顺序详解
  • 关于C++类的成员初始化列表的相关问题

相关文章

  • 2017-05-28解析C++编程中的选择结构和switch语句的用法
  • 2017-05-28优秀程序员必须知道的20个位运算技巧
  • 2017-05-28贪吃蛇游戏C++命令行版实例代码
  • 2017-05-28C++中strtok()函数的用法介绍
  • 2017-05-28深入理解C++中变量的存储类别和属性
  • 2017-12-31数据结构 多关键字排序
  • 2017-05-28VC创建圆角dialog的实现方法
  • 2017-05-28C语言中计算正弦的相关函数总结
  • 2017-05-28C++中指向对象的常指针与指向常对象的指针详解
  • 2017-05-28C++ 中const和复合类型

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 对比C语言中getc()函数和ungetc()函数的使用
    • 通过c++11改进我们的模式之改进命令模式
    • C++实现简单的希尔排序Shell Sort实例
    • C实现的非阻塞方式命令行端口扫描器源码
    • C语言 文件操作解析详解及实例代码
    • C++对象的动态建立与释放详解
    • 从汇编看c++中默认构造函数的使用分析
    • C++设计模式之装饰模式
    • c语言 汉诺塔算法代码
    • C++软件添加dump调试打印日志(推荐)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有