类析构函数c ++

| 我对c ++中的析构函数有疑问。 我有一个这样的课:
class X {  

private:
    string m_instanceName
    string m_path;
    ConnexionHashMap m_connexions;
    Module** m_moduleType;
    Powerdomain* m_powerDomain;
    Module ** m_father;
};  
以下是有关ConnexionHashMap的一些信息:
typedef hash_map<const string, Connexion, strptrhash, strptrequal> ConnexionHashMap;

struct Net{
     string name;
     vector<string> connectedPins;
     bool isPin;
};

typedef struct Net Net;

struct Connexion{
    string pin;
    Net* net;
};

typedef struct Connexion Connexion;
如果我不想删除m_modulType,m_powerDomain和m_father(因为它们很可能被另一个对象引用),我是否必须显式编写一个析构函数方法? 我知道字符串是一个标准对象,它将被其自己的析构函数销毁,但是ConnexionHashMap是否会被标准哈希图模板析构函数销毁,还是我应该以某种方式手动删除它? (同样在旁注中,有一种简单的方法来查看我的程序在Eclipse cdt上运行时如何管理我的内存吗?)     
已邀请:
  如果我不想删除m_modulType,m_powerDomain和m_father(因为它们很可能被另一个对象引用,那么我是否必须显式编写一个析构函数方法?
m_powerDomain
m_father
m_modulType
是指针,除非明确进行操作,否则它们所指向的对象将不会被删除。因此,如果要删除析构函数,则应编写一个析构函数,否则不需要。   我知道字符串是一个标准对象,它将被其自己的析构函数销毁,但是ConnexionHashMap是否会被标准哈希图模板析构函数销毁,还是我应该以某种方式手动删除它? 不是
std::string
是使它们自动删除的标准对象,而是您在类中包含
std::string
作为成员的事实,因此该字符串实际上是分配在对象内存中的,当删除该字符串时也(不需要在析构函数中指定任何内容)。 相同的,作为对象成员而不是指针包含的“ 7”,将被析构函数自动删除,而无需执行任何操作。 (同样在旁注中,有一种简单的方法来查看我的程序在Eclipse cdt上运行时如何管理我的内存吗?) 您可以使用探查器,例如valgrind或其他可用的探查器...     
hash_map因为是X类的成员而被删除。使用指针寻址的对象不会被删除,如果需要删除这些对象,则必须编写一个析构函数。     
删除类后,该类中的局部变量将自动删除(即使没有显式析构函数)。 用户定义的析构函数用于删除指针持有的变量,并释放该类持有的资源。     
您可以通过仅对共享对象使用
boost::shared_ptr
(在C ++ 0x中为ѭ9avoid)来避免任何问题。它使用引用计数来跟踪对对象的引用,并在最后一个引用消失后删除对象。 关于您的问题,当包含对象被销毁时,所有不是指针或引用的成员对象都将被销毁。包括您的哈希图     
一些基本原则: 所有非静态的析构函数 成员对象将在 对象的析构函数。 无论您是否定义了 是否破坏不可能 改变这个。 基本类型的析构函数 指针类型和引用类型是 没事总是。如果你想 他们身上发生的事情,你必须 提供用户定义的析构函数, 并使其在那里发生。 标准容器(以及所有 预标准standard10ѭ)包含 值;您的内容
ConnectionHashMap
是以下内容的副本: 无论您插入什么,都会 被破坏者破坏了 哈希图。 (我不确定是否还是 这与您的代码有何关系。一种 取决于什么的寿命
net
指向,它是怎么回事 管理。取决于 应用程序和设计 使
Connection::net
a可能有意义
boost::shared_ptr
。可能:是 尚未得出结论 是个好主意。)     

要回复问题请先登录注册