类析构函数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上运行时如何管理我的内存吗?)
没有找到相关结果
已邀请:
5 个回复
厢界山攀
,
和
是指针,除非明确进行操作,否则它们所指向的对象将不会被删除。因此,如果要删除析构函数,则应编写一个析构函数,否则不需要。 我知道字符串是一个标准对象,它将被其自己的析构函数销毁,但是ConnexionHashMap是否会被标准哈希图模板析构函数销毁,还是我应该以某种方式手动删除它? 不是
是使它们自动删除的标准对象,而是您在类中包含
作为成员的事实,因此该字符串实际上是分配在对象内存中的,当删除该字符串时也(不需要在析构函数中指定任何内容)。 相同的,作为对象成员而不是指针包含的“ 7”,将被析构函数自动删除,而无需执行任何操作。 (同样在旁注中,有一种简单的方法来查看我的程序在Eclipse cdt上运行时如何管理我的内存吗?) 您可以使用探查器,例如valgrind或其他可用的探查器...
募磷
妒垮
雇砰
(在C ++ 0x中为ѭ9avoid)来避免任何问题。它使用引用计数来跟踪对对象的引用,并在最后一个引用消失后删除对象。 关于您的问题,当包含对象被销毁时,所有不是指针或引用的成员对象都将被销毁。包括您的哈希图
凸晴
是以下内容的副本: 无论您插入什么,都会 被破坏者破坏了 哈希图。 (我不确定是否还是 这与您的代码有何关系。一种 取决于什么的寿命
指向,它是怎么回事 管理。取决于 应用程序和设计 使
a可能有意义
。可能:是 尚未得出结论 是个好主意。)