Tag: 析构函数

我是否需要显式调用基本虚拟析构函数?

当用C ++重写一个类(用一个虚拟析构函数)时,我在inheritance类上再次实现了析构函数,但是是否需要调用基类析构函数? 如果是的话,我想像是这样的… MyChildClass::~MyChildClass() // virtual in header { // Call to base destructor… this->MyBaseClass::~MyBaseClass(); // Some destructing specific to MyChildClass } 我对吗?

创build一个对象:有或没有`new`

可能重复: 使用new和without实例化一个对象有什么不同 这可能是一个基本的问题,可能已经被问到了(比如这里 )。 但我仍然不明白。 所以,让我问一下。 考虑下面的C ++类: class Obj{ char* str; public: Obj(char* s){ str = s; cout << str; } ~Obj(){ cout << "Done!\n"; delete str; // See the comment of "Loki Astari" below on why this line of code is bad practice } }; 下面的代码段有什么区别: Obj o1 ("Hi\n"); 和 Obj* o2 = […]

明确地调用析构函数

我明白,在大多数情况下,我们不应该明确地调用析构函数。 不过,我从C ++ 11 Standard N3485 Section 13.4.5模板参数中看到了一个例子: 显式析构函数调用具有类模板专用化types的对象可以显式指定模板参数。 例: template<class T> struct A { ~A(); }; void f(A<int>* p, A<int>* q) { p->A<int>::~A(); // OK: destructor call q->A<int>::~A<int>(); // OK: destructor call } 在我看来,在这种情况下我们可以明确地调用析构函数,你能向我解释为什么? 在这个例子中,这些析构函数调用是什么意思? 为什么他们是合理的? 另一个问题: 除了当我们正在实施的placement delete ,我们可以明确调用析构函数的情况是什么? 谢谢。 编辑:我从C ++常见问题find,我们不应该显式调用本地variables的析构函数。

std :: list :: remove方法调用每个被删除元素的析构函数吗?

std::list<Node *> lst; //…. Node * node = /* get from somewhere pointer on my node */; lst.remove(node); std :: list :: remove方法调用每个被删除元素的析构函数(和可用内存)吗? 如果是的话,我该如何避免呢?

在C ++中的对象破坏

什么时候在C ++中被销毁的对象,这是什么意思? 我是否必须手动销毁它们,因为没有垃圾收集器? exception如何发挥作用? (注意:这是一个Stack Overflow的C ++常见问题解答的入口,如果你想批评在这个表单中提供FAQ的想法,那么在这个开始所有这些的meta上的贴子将是这个地方的答案。那个问题在C ++聊天室中进行监控,常见问题解决scheme首先出现,所以你的答案很可能会被那些提出这个想法的人阅读)。

为什么我们需要一个纯粹的C ++虚拟析构函数?

我明白需要一个虚拟析构函数。 但为什么我们需要一个纯粹的虚拟析构函数呢? 在其中一篇C ++文章中,作者提到当我们想要做一个类抽象的时候,我们使用了纯粹的虚拟析构函数。 但是,我们可以通过将任何成员函数作为纯虚拟来进行类抽象。 所以我的问题是 我们什么时候才真正构build一个纯虚拟的析构函数? 任何人都可以提供一个很好的实时示例吗? 当我们创build抽象类时,使析构函数也是纯粹的虚拟是一个好的做法吗? 如果是的话,为什么?

如何正确清理Python对象?

class Package: def __init__(self): self.files = [] # … def __del__(self): for file in self.files: os.unlink(file) __del__(self)失败,出现AttributeErrorexception。 我知道当__del__()被调用时, Python不能保证 “全局variables”(这个上下文中的成员数据?)的__del__() 。 如果是这种情况,这是exception的原因,我如何确保对象正常破坏?

C ++中的纯虚拟析构函数

写错了吗? class A { public: virtual ~A() = 0; }; 为抽象的基类? 至less在MSVC编译…会在运行时崩溃吗?

C ++:临时参数的寿命?

当创build一个MyClass的新实例作为一个像这样的函数的参数: class MyClass { MyClass(int a); }; myFunction(MyClass(42)); 这个标准是否使得任何受害者的parsing器的时间? 具体来说,我可以假设它会在调用myFunction()之后的下一个语句之前被调用吗?

有没有Java的析构函数?

有没有Java的析构函数? 我似乎无法find任何文件。 如果没有,我怎样才能达到同样的效果? 为了使我的问题更具体,我正在编写一个处理数据的应用程序,并且规范说应该有一个“重置”button,使应用程序恢复到刚刚启动的状态。 但是,除非应用程序已closures或按下重置button,否则所有数据都必须“有效”。 通常是C / C ++程序员,我认为这将是微不足道的实施。 (因此,我计划最后实现它。)我组织我的程序,使所有“可重置”对象将在同一个类中,以便按下重置button时可以销毁所有“实时”对象。 我在想,如果我所做的只是解引用数据,并等待垃圾收集器收集它们,如果我的用户重复input数据并按下重置button,是不是会有内存泄漏? 我也在想,因为Java作为一种语言已经相当成熟,所以应该有一种方法来防止这种情况发生,或者优雅地解决这个问题。