English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Points to note when using the new keyword in constructors

Problem, das bei der Initialisierung der Zeigermitglieder eines Objekts mit new auftritt

Wenn der Zeigermitglied im Konstruktor mit new initialisiert wird, muss im Destruktor delete verwendet werden, und new entspricht delete, new[] entspricht 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;
}

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

声明:本文内容来自网络,版权归原作者所有。内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未进行人工编辑处理,也不承担相关法律责任。如果您发现涉嫌版权的内容,请发送邮件至:notice#oldtoolbag.com(在发送邮件时,请将#更换为@进行举报,并提供相关证据。一经查实,本站将立即删除涉嫌侵权内容。)

You might also like