c++ - 对象析构函数中 "string"成员是否需要调用析构函数?

标签 c++ string destructor

我创建了一个类:

class Message {
public:
  Message(string sender, string message_text);
  Message(string sender);
  Message();

  ~Message();

  bool wasRead() const;
  void updateWasReadStatus();
  void printMessage() const;
private:
  string Sender_;
  string Text_;
  bool wasRead_;
};

当我实现析构函数时,是否必须显式调用 Sender_Text_ 的析构函数?或者它们是在我编写时被默认析构函数隐式调用的(没有显式实现 ~Message()):

delete pMessage; //pointer to Message object

无论如何,我是这样实现析构函数的:

Message::~Message(){
    delete Sender_;
    delete Text_;
}

可以吗?在这种情况下,我应该指望默认析构函数吗?

我明白了(如有错误请指正): 当调用默认析构函数时,它会为每个成员调用一个析构函数:

  • 一个已实现的,如果存在的话,
  • 如果不存在,则为默认值。

如果我没有做对,如果有人能向我解释,我将不胜感激。

最佳答案

不,你不需要。 (而且你不能!)

您只对使用new 分配的内存负责,只有那时您才应该使用delete

关于c++ - 对象析构函数中 "string"成员是否需要调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27783021/

相关文章:

c++ - 使用预处理器添加编译器命令

c++ - 派生对象的 boost 序列化不调用派生的序列化()

c++ - 专门化类模板构造函数

string - Excel 列中最常见的文本

c++ - 局部变量的析构函数是否总是保证在超出范围时被调用?

class - 智能指针和析构函数

c++ - 接收 COM 事件

javascript - 隐藏包含特定字符串的div

ios - Swift的String文档中 'Swift are Unicode correct and locale insensitive'是什么意思?

c++ - 在析构函数中使用 "this"