欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

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

时间:2021-04-21 09:39:11|栏目:C代码|点击:

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

上一篇:C语言中进程信号集的相关操作函数详解

栏    目:C代码

下一篇:详解C语言的exp()函数和ldexp()函数以及frexp()函数

本文标题:C++ 构造函数中使用new时注意事项

本文地址:http://www.codeinn.net/misctech/105843.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有