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

 更新时间:2017年02月19日 09:58:53   作者:xdzhanght  
本文主要介绍了C++ 构造函数中使用new时注意事项。具有很好的参考价值,下面跟着小编一起来看下吧

使用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);
}

赋值构造函数:

  • 检查自我复制情况
  • 释放成员指针之前指向内存
  • 复制数据不仅仅地址
  • 返回一个指向调用对象的引用
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;
}

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

相关文章

  • 二叉树中叶子节点的统计和树高问题

    二叉树中叶子节点的统计和树高问题

    今天小编就为大家分享一篇关于二叉树中叶子节点的统计和树高问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • C++实践数组作数据成员的参考

    C++实践数组作数据成员的参考

    今天小编就为大家分享一篇关于C++实践数组作数据成员的参考,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • c++虚函数与虚函数表原理

    c++虚函数与虚函数表原理

    这篇文章主要介绍了c++虚函数与虚函数表原理,用virtual 修饰的成员函数叫虚函数,下面围绕c++虚函数与虚函数得相关资料展开内容,需要的朋友可以参考一下
    2021-12-12
  • 详解C++17中if和switch语句的新特性

    详解C++17中if和switch语句的新特性

    这篇文章主要为大家详细介绍了C++17中if和switch语句的新特性的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C++中的 % 的含义说明

    C++中的 % 的含义说明

    很多朋友私信小编不理解C++中的 % 的含义,其实有两种意思,一种是格式化字符串输出另一种是整数取余,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2023-03-03
  • C/C++回调函数介绍

    C/C++回调函数介绍

    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数
    2013-10-10
  • VC下实现fopen支持中文的方法

    VC下实现fopen支持中文的方法

    这篇文章主要介绍了VC下实现fopen支持中文的方法,需要的朋友可以参考下
    2014-07-07
  • C语言基础知识点解析(extern,static,typedef,const)

    C语言基础知识点解析(extern,static,typedef,const)

    本篇文章是对C语言基础知识点(extern,static,typedef,const)的用法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-10-10
  • c/c++获取系统时间函数的方法示例

    c/c++获取系统时间函数的方法示例

    这篇文章主要介绍了c/c++获取系统时间函数的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C++遍历文件夹下所有文件的多种方法

    C++遍历文件夹下所有文件的多种方法

    这篇文章主要介绍了C++遍历文件夹下所有文件的多种方法,需要的朋友可以参考下
    2018-01-01

最新评论