72得票7回答
C++对象为什么有默认析构函数?

当我没有声明构造函数时,编译器会为我提供一个默认构造函数,该构造函数不带参数和定义(空函数体),因此它将不执行任何操作。 所以,如果我完成了一个对象的使用,那么默认析构函数难道不会重新分配(释放)该对象所使用的内存吗?如果它不会,那我们为什么要得到它呢? 或许同样的问题也适用于默认构造函数。如...

69得票12回答
PHP 析构函数

请给我一些现实生活中使用过 __destruct 在您的类中的例子。

68得票1回答
内置类型(int,char等)的析构函数

在C++中,以下代码会导致编译器错误:void destruct1 (int * item) { item->~int(); } 这段代码几乎相同,我只是将int typedef为另一种类型,然后发生了一些神奇的事情:typedef int myint; void destruct...

68得票7回答
动态分配一个对象数组

我有一个包含动态分配数组的类,比如说class A { int* myArray; A() { myArray = 0; } A(int size) { myArray = new int[size]; }...

67得票4回答
如何强制删除一个Python对象?

我对Python中的__del__细节很好奇,什么时候以及为什么要使用它,以及它不应该用于什么。我已经通过艰难的方式学到了,它并不像一个析构函数那样被天真地期望,因为它不是__new__ / __init__的相反操作。class Foo(object): def __init__(...

66得票7回答
为什么.NET中没有RAII(资源获取即初始化)?

作为一名主要使用C++的开发者,Java和.NET中缺少RAII(资源获取即初始化)一直困扰着我。通过try finally或.NET的using construct将清理责任从类编写者转移到其使用者似乎明显不够好。 我知道Java中为什么不支持RAII,因为所有对象都位于堆上,垃圾回收器本...

66得票6回答
为什么在异常情况下析构函数不会被调用?

我本来期望在这个程序中 A::~A() 会被调用,但现在没有被调用:#include <iostream> struct A { ~A() { std::cout << "~A()" << std::endl; } }; void f() { A...

65得票5回答
C++中析构函数和构造函数的调用顺序是什么?

C++中构造函数和析构函数的调用顺序是什么?使用一些基类和派生类的例子进行说明。

64得票2回答
C++是否会调用全局和类静态变量的析构函数?

根据我的示例程序,看起来它确实在两种情况下都调用了析构函数。由于全局变量和类静态变量应该分配在程序堆栈的数据段中,那么在什么时候调用它们的析构函数呢?

63得票8回答
默认析构函数能自动生成为虚拟析构函数吗?

默认析构函数可以自动生成为虚拟析构函数吗? 如果我定义了一个基类,但没有默认析构函数,那么是否会自动生成默认的虚拟析构函数?