析构函数是否可以不调用特定字段的析构函数
Is it possible for the destructor to NOT call the destructor of a specific field?
我使用的是带有-std=c++0x
标志的C++编译器。
我正在为课堂编写一个虚拟内存系统的模拟,遇到了一个问题:
其中一个类VirtualMemory
初始化另一个名为OurPointer
的类的几个对象,方法是给它们一个整数和一个指向自身的指针。
该程序运行多个指针,这些指针都链接到同一个虚拟内存。OurPointer
的构造函数看起来是这样的:
OurPointer::OurPointer(int adr , VirtualMemory* vrtlMem)
{
_adr = adr;
_vrtlMem = vrtlMem;
}
这是因为OurPointer
用于与VirtualMemory
一起工作。问题是,每次OurPointer
对象被销毁时,它都会调用_vrtlMem
的析构函数,该析构函数指向程序仍在使用的同一个VirtualMemory
对象。
有没有办法将该字段从析构函数中排除?我试着把它变成一个静态字段,或者改变指针,但它并没有停止析构函数。
问题是,每次OurPointer对象被破坏时,它都会调用_vrtlMem 的析构函数
只有当:
-
你已经编码了一个析构函数来实现这一点,例如:
OurPointer::~OurPointer() { delete _vrtlMem; }
-
_vrtlMem
是一个类似于std::auto_ptr
或std::unique_ptr
的智能指针,它们在被指向对象自身被销毁时销毁它们。
,它指向程序仍在使用的同一个VirtualMemory对象。
这正是C++11的std::shared_ptr
所设计的那种情况。在清除对共享对象的所有引用之前,不会对其进行销毁。
由于您没有使用C++11,因此可以使用boost::shared_ptr
,也可以手动实现引用计数。
有没有办法将该字段从析构函数中排除?
如果_vrtlMem
是智能指针,则不是。但是shared_ptr
为您处理引用计数。
否则,如果_vrtlMem
只是一个原始指针,那么当您不希望对指向的对象进行销毁时,就不要对其进行销毁。
- 什么时候调用组成单元对象的析构函数
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 什么时候调用析构函数
- 优先顺序:智能指针和类析构函数
- C++-明确何时以及如何调用析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 在c++中使用向量时,如何调用构造函数和析构函数
- 重载运算符new[]的行为取决于析构函数
- 我需要知道编译器如何在cpp中使用析构函数
- C++销毁顺序:在类析构函数之前调用字段析构函数
- 析构函数是否可以不调用特定字段的析构函数
- 模板类c中的析构函数:如何删除可能是指针或不是指针的字段?
- 静态字段的析构函数.辛格尔顿实现
- 删除超类会调用其字段的析构函数吗?
- 析构函数在这段代码中隐藏在哪里
- C++11:我可以创建一个类型具有已删除析构函数的字段吗
- 类析构函数中的段错误
- 删除第一次循环时未调用析构函数的保留字
- basic_string析构函数中的段错误