18得票3回答
C++中类似于golang的"defer"语句的实现方式

我正在阅读关于go语言的defer语句。它允许您指定在函数结束时要执行的操作。例如,如果您有一个文件指针或资源,而不是在每个可能的返回路径上写free/delete,您只需要一次指定defer函数即可。 看起来类似的功能最终可能会出现在C++中( C++中标准的defer/finalizer...

11得票1回答
为什么我们不能从派生类中调用受保护的析构函数?

我知道私有(当然也包括公共)析构函数的用途。 我也知道在派生类中使用受保护的析构函数的用途: 使用受保护的析构函数来防止通过基类指针销毁派生对象 但是我尝试运行下面的代码,它无法编译:struct A{ int i; A() { i = 0;} prote...

7得票7回答
显式调用析构函数没有销毁我的对象,为什么?

我正在调用析构函数释放内存,但是它并没有删除我的对象。这是什么原因? 我的代码如下: class A { public: int a; A() { cout << "a" << endl; } }; class B...

24得票2回答
typedef别名的析构函数

#include <iostream> struct A { ~A(); }; A::~A() { std::cout << "Destructor was called!" << std::endl; } typedef A AB; int m...

8得票2回答
删除一个结构体指针是否也会删除结构体内的指针?

假设我有一个结构体,其中有两个指针,每个指针都指向一个已实现析构函数的对象。还假设头部指向一个Listnode结构体,该结构体具有非空值*student和*next: struct Listnode { Student *student; Listnode *next; };...

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

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

8得票3回答
C++抽象类析构函数

在父类中仅使用纯虚析构函数来创建一个抽象类,这是否是良好的实践(并且是否可能)? 以下是一个示例: class AbstractBase { public: AbstractBase () {} virtual ~AbstractBase () = 0; }; class...

7得票3回答
C++ 追踪访问冲突的建议?

我一直在试图追踪我的程序中的访问冲突问题。当析构函数第三次被调用时,它就会发生,而且恰好是在析构函数似乎完成后。 我花了几个小时来追踪这个问题,所以我正在寻求进一步的建议。我使用new和delete运算符创建类实例。Visual Studio输出窗口显示: 在WebCollationAge...

20得票7回答
单元测试析构函数?

有没有好的方法来进行析构函数单元测试?比如说我有一个类像下面这个(虚构)的例子:class X { private: int *x; public: X() { x = new int; } ~X() { ...

34得票5回答
为什么类的析构函数会被调用两次?

如果这个问题听起来很傻,我向您道歉。我在Stack Overflow关注专家并尝试一些例子,这是其中之一。我确实尝试了搜索选项,但没有找到这种类型的答案。 class A { public: A(){cout<<"A Contruction"<&l...