12得票4回答
如果构造函数中抛出异常,有什么最佳实践可以防止内存泄漏?

我知道如果构造函数中抛出异常,析构函数将不会被调用(简单类,没有继承)。因此,如果构造函数中抛出异常并且有可能某些堆内存没有清除。那么这里的最佳实践是什么?假设我必须在构造函数中调用某个函数,并且它可能会抛出异常。在这种情况下,我是否应该始终使用共享指针?还有什么替代方案?谢谢!

8得票7回答
Java中是否有C++的析构函数等价物?

简单来说,以下是设计: class Session { Timer t = new Timer(); // ... }; 每当分配Session时,我会在其中启动一个计时器;计时器将在10-20分钟后过期。现在,假设Session在计时器到期之前被销毁,则需要停止计时器。我不知道...

8得票3回答
Python __del__ 在异常情况下未被调用

我正在尝试将一个编写不良的Python模块(我无法控制)包装成一个类。问题是,如果我不显式调用该模块的关闭函数,那么Python进程在退出时会挂起,因此我尝试使用一个带有del方法的类来包装该模块,但是在异常情况下del方法似乎不会被调用。 示例: class Test(object): ...

10得票1回答
在XS代码中安全地释放资源(在作用域退出时运行析构函数)。

我正在编写一个XS模块。我分配一些资源(例如malloc()或SvREFCNT_inc()),然后进行涉及Perl API的操作,最后释放资源。这在普通的C语言中是没有问题的,因为C语言没有异常,但使用Perl API的代码可能会调用croak(),从而阻止正常的清理并泄漏资源。因此,除了相当...

12得票7回答
C#中的继承和析构函数

根据这里所述,它指出Destructors cannot be inherited or overloaded.在我的情况下,对于所有的子类,析构函数将是相同的。这基本上是告诉我必须在每个子类中定义相同的析构函数。我不能在基类中声明析构函数并处理销毁吗?假设我有这样一个东西:class A {...

9得票6回答
销毁并重新创建一个对象会使指向该对象的所有指针无效吗?

这是对这个问题的跟进。假设我有以下代码: class Class { public virtual method() { this->~Class(); new( this ) Class(); } }; Class* obje...

18得票3回答
微不足道的破坏的意义

在C++17中,新的std::optional规定,如果T是平凡析构的,则必须使其平凡析构[optional.object.dtor]: ~optional(); 1 效果:如果is_trivially_destructible_v<T> != true并且*this包含一...

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

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

25得票2回答
为什么`std::exit`不能按预期触发析构函数?

#include <cstdlib> #include <thread> #include <chrono> #include <iostream> using namespace std; using namespace std::liter...

11得票4回答
C++:在函数内创建并将其作为结果返回新对象时,必须使用new运算符来创建对象吗?

我有两个虚拟问题困扰了我一段时间,我在网上搜索并阅读了很多C++教程,但是我无法找到确切的答案。 假设我们有一个名为Node的类,它是单向链表的基本构建块。class Node { int data; Node* next; } 事实1:局部变量(非静态)在对应函数退出时会被销毁...