46得票5回答
我们何时需要定义析构函数?

我读到过当我们有指针成员和定义一个基类时,需要定义析构函数,但我不确定是否完全理解。其中一个让我不确定的是是否定义默认构造函数是无用的,因为我们总是默认获得一个默认构造函数。另外,我不确定我们是否需要定义默认构造函数来实现RAII原则(我们只需要在构造函数中放置资源分配而不定义任何析构函数吗?...

45得票3回答
何时在构造函数和析构函数中调用this->是安全的?

到目前为止,我还没有找到一个确定的答案。在一个对象内部何时安全地调用this->,特别是在构造函数和析构函数中。 并且,在使用public继承时,对于该调用结果进行向上转换和向下转换是否安全? 例如:class foo { foo(): a(), b(this-&g...

44得票6回答
Python类中清理临时文件夹的正确方法

我正在创建一个类,希望能够生成一组文件夹的临时工作空间,使其在对象生存期内保持存在,并在对象销毁时被删除。在def __init__中,我使用tempfile.mkdtemp()来创建这个空间,但是我已经了解到不能依赖于__del__被调用。 我希望实现类似以下功能:class MyClass...

44得票4回答
如何在C++中编写一个简单的类?

我已经阅读了很多有关C++类的教程,但它们漏掉了其他教程包括的一些内容。 请问有人可以展示一下如何编写和使用一个非常简单的C++类,其中包含可见性、方法以及一个简单的构造函数和析构函数吗?

44得票8回答
手动销毁C#对象

我相对于Java和C++比较新学习C#,现在有一个关于手动垃圾回收的问题:在C#中是否可以手动销毁一个对象呢? 我知道IDisposable接口,但是假设我正在处理一个我没有编写并且没有实现IDisposable接口的类呢?它将没有.Dispose()方法,所以using { }也不可用,而....

43得票1回答
“= default”析构函数和空析构函数有什么区别?

我希望防止用户将我的类用作自动变量,因此我编写了以下代码:class A { private: ~A() = default; }; int main() { A a; } 我原本以为这段代码无法编译,但是使用g++却没有出现错误。 然而,当我将代码改成以下形式时:class A {...

42得票1回答
一个析构函数可以被声明为final吗?

C++标准允许将析构函数声明为final吗?就像这样: class Derived: public Base { ... virtual ~Derived() final; } 如果是这样,那么这是否会阻止派生类的声明: class FurtherDer...

42得票4回答
delete[] 操作符的时间复杂度

delete[]操作符的时间复杂度是多少? 我的意思是它是如何实现的 - 是否迭代遍历数组中的所有元素并为每个元素调用析构函数? 这个操作符对于基本类型(例如int)和用户定义的类型是否执行相同的操作?

42得票4回答
析构函数参数

《是否可以重载析构函数?》 这篇文章谈到了析构函数的重载。 这引发了一个问题:析构函数可以有参数吗? 我从未使用过或看到过带参数的析构函数。我无法想出使用析构函数参数的原因的例子。

42得票3回答
这个C++析构函数是否多余?

我收到了一些C++代码,其中定义了各种结构,例如:typedef struct _someStruct_ { std::string someString; std::vector<std::string> someVectorOfStrings; int s...