2015-01-05 43 views
0

我创建了一个类:是否有必要在对象析构函数中调用“string”成员的析构函数?

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_; 
}; 

当我实现desturctor,我必须显式调用析构函数为Sender_ & Text_?或者,他们含蓄由默认的析构函数调用时我写的(不执行~Message()明确):

delete pMessage; //pointer to Message object 

总之,我实现了这样的析构函数:

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

,可以吗?我应该在这种情况下计算可能的默认析构函数吗?

我明白(请纠正我,如果我错了): 时默认调用析构函数,它要求每个成员析构函数:

  • 一个实施一个,如果它存在,
  • 如果不存在,则为默认值。

如果我不明白,我会很感激,如果有人能解释给我。

谢谢。

+4

如果您没有使用'new',则不需要调用'delete'。 – Borgleader

+0

在类的析构函数完成后,所有非指针类成员的destuctor自动调用。如果类对象拥有内存,那么任何指针成员都需要被删除(特别是当你在类中使用'new'时)。 – crashmstr

+0

@StephaneRolland修,谢谢。 – Borgleader

回答

8

不,你不需要。 (你绝对不能!)

你只负责你已分配的内存与new,只有那么你应该使用delete

+0

在这种情况下,我不应该实施析构函数?或者我应该实施一个空的? –

+0

@Day_Dreamer如果你不需要在析构函数体中放置任何代码,你通常不需要提供析构函数。有一些例外,如虚拟析构函数。 Ps传递字符串作为const引用。 –

+0

谢谢@NeilKirk。也许你可以看一下这个问题的编辑版本。我理解对吗? –

相关问题