C++构造函数中使用new

注意事项

  • 如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete。
  • new和delete必须相互兼容。new对应delete,new[]对应于delete[]。
  • 如果有多个构造函数,则必须以相同的方式使用new,要么都带中括号,要么都不带。因为只有一个析构函数,所有构造函数必须与它兼容。
  • 指针成员必须被显示初始化,即使在默认构造函数中。可以用new[]或者将指针设置为NULL。delete无论是否带中括号都可以用于空指针。
  • 应定义一个分配内存(而不是将指针指向已有内存)的复制构造函数。这样程序可以将类对象初始化为另一个类对象。(下面有解释)
  • 应定义一个重载赋值运算符的类成员函数。

问题

:如果您定义了一个类,其成员是使用new初始化的,请指出三个可能出现的问题以及如何纠正

  1. 对象过期时,成员指针指向的数据还在内存中,而且不可访问,因为成员指针已经丢失。解决方法:可以让析构函数的delete来删除。
  2. 如果将这个对象初始化为另一个对象,只会复制指针值,而不复制指向的数据,所以两个对象的指针指向同一个内存。如果这两个对象过期时,则析构函数将试图释放同一个内存两次。解决方法:定义一个复制构造函数,使初始化复制指向的数据
  3. 将一个对象赋给另一个对象也将导致两个指针指向相同的数据。解决方法:重载赋值运算符,使之复制数据,而不是指针

你可能感兴趣的:(C++,指针)