问题标签 [destructor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
11 回答
281607 浏览

c++ - 删除指向子类的指针会调用基类析构函数吗?

我有一个class A为其一个字段使用堆内存分配。类 A 被实例化并存储为另一个类(class B.

当我处理完 B 类的对象后,我调用delete,我假设它调用了析构函数……但这是否也调用了 A 类的析构函数?

编辑:

从答案中,我认为(如果不正确,请编辑):

  1. deleteB 的一个实例调用 B::~B();
  2. 调用A::~A();
  3. A::~A 应该显式地delete为 A 对象的所有堆分配的成员变量;
  4. 最后,将存储所述 B 类实例的内存块返回到堆 - 当使用new时,它首先在堆上分配一块内存,然后调用构造函数来初始化它,现在在调用所有析构函数来完成对象之后对象所在的块被返回到堆中。
0 投票
1 回答
3502 浏览

c++ - 为什么不为函数返回的对象调用析构函数?

我在想,当一个函数将堆栈上的一个对象返回给调用函数时,调用函数会获取原始对象的副本,但是一旦堆栈展开,就会调用原始对象的析构函数。但是在下面的程序中,析构函数只被调用一次。我预计它会被调用两次。

但是“MyClass 的析构函数”只打印一次。我的假设是错误的还是这里发生了其他事情?

0 投票
4 回答
293 浏览

c# - 静态实例,从未调用析构函数

请看下面的代码。析构函数永远不会被调用。任何人都知道为什么以及如何纠正这种情况?

0 投票
6 回答
1043 浏览

exception - 面试问题的可接受答案

对于以下问题,你会接受什么样的答案

“描述从构造函数和析构函数抛出异常的过程和/或陷阱”(C++/C#/java)

对于声称在这些语言中拥有多年经验的候选人(如果他错过了这一点,你几乎肯定不想要他),你认为这方面的知识量是必不可少的。

0 投票
2 回答
34077 浏览

c++ - 与构造函数/析构函数定义相关的c ++编译错误

我正在尝试定义我的类的构造函数和析构函数,但我不断收到错误消息:

隐式声明的 'x::x()' 的定义

这是什么意思?

部分代码:

0 投票
2 回答
1388 浏览

java - 如何清理 Java 中打开的进程?

我正在从 Java 程序启动一个进程。我抓住它,在程序的稍后点,我可能会向它发送一些信号(与 UNIX 信号不同——一种不同的机制),告诉它自己清理并关闭,这是终止这个进程的正确方法。我稍后可能会重新启动并保持该进程并再次停止它任意次数。

我希望我的程序在存在时发出信号终止进程并确保它存在。否则,由于 Java 异步启动进程,它会在我的程序终止后持续存在并继续运行。

我以为我会在包含 Process 变量的对象的析构函数中执行此操作,但似乎 Java 没有析构函数。它有一个用于释放通过 JNI 分配的内存的 finalize() 方法,但情况并非如此,显然你不能保证 finalize() 会被调用:它仅在对象被垃圾回收时调用,并且程序可能会在没有调用垃圾回收的情况下运行到终止,在这种情况下,所有东西都会立即释放,不会发生垃圾回收,也不会发生 finalize()。

确保在我的程序退出时首先调用此清理代码的最佳方法是什么?

我看到 Java 1.6 引入了 Runtime.addShutdownHook() 方法,但我目前停留在 Java 1.5 上。

0 投票
5 回答
971 浏览

c++ - 抛出析构函数,内存损坏?

我们有一个类,其语义行为如下:-

我知道在 dtors 中抛出异常是邪恶的;但是放弃第 3 方库资源会引发异常(但可以立即重新获取,这很奇怪!)。还有一个资源池,比如 Sample 类的数组/容器。因此,有两种情况需要考虑:动态分配对象的销毁和动态分配的对象数组的销毁。

目前,只有在使用数组版本(池)时,应用程序才会在不同的执行点随机崩溃。我们认为这是由于内存损坏,但为什么非池化版本有效?

分配的内存会发生什么?它是未定义的行为吗?在数组的情况下会发生什么?数组的所有元素(比如第一个元素的 dtor 是否抛出)的 dtors(至少,不是内存)是否被调用?

提前致谢,

EDIT-1:好吧,我们将其追踪到一些未调用的数组元素的 dtors。但是分配的内存似乎没有问题......以下是SC22-N-4411.pdf的第5.3.5.7节)

<\截图>

在这种情况下,看起来内存总是被释放。我对标准的解释正确吗?

0 投票
10 回答
502236 浏览

python - 如何正确清理 Python 对象?

__del__(self)以上失败并出现 AttributeError 异常。我了解Python 不保证__del__()调用时存在“全局变量”(此上下文中的成员数据?) 。如果是这种情况并且这是异常的原因,我如何确保对象正确销毁?

0 投票
4 回答
98406 浏览

c++ - 如何用 C++ 编写一个简单的类?

我一直在阅读很多关于 C++ 类的教程,但他们错过了其他教程包含的内容。

有人可以告诉我如何编写和使用一个非常简单的 C++ 类,它使用可见性、方法和简单的构造函数和析构函数吗?

0 投票
4 回答
2618 浏览

c++ - 如何强制不同dll中静态对象的破坏顺序?

我在 2 个不同的 dll中有 2 个静态对象:

一个对象Resources(这是一个单例)和一个对象User。析构函数中的对象用户必须访问对象资源。

如何在对象用户之前强制对象资源不被破坏?