9得票2回答
这段代码会生成一个materialized base prvalue吗?它应该可以编译吗?

以下代码在gcc 9.1 godbolt编译通过,但在clang 8 godbolt中无法编译: class A { protected: ~A() = default; }; class B final : public A { }; int main() { auto...

54得票7回答
C++中的析构函数与向量、指针相关问题

据我所知,在析构函数中应该销毁使用new创建的所有内容,并关闭已打开的文件流和其他流。但是,我对C++中的其他对象存在一些疑虑: std::vector和std::string:它们会自动销毁吗? 如果我有以下内容:std::vector<myClass*> 指向类的指针。当...

18得票6回答
何时需要声明自己的析构函数?

class Point { public: float x,y; Point() {} Point(float,float); Point operator + (Point); Point operator * (double); vo...

7得票1回答
警告:忽略了默认函数上的__host__注释。 <- 为什么?

从CUDA 8.0转换到CUDA 9.0 RC时,我收到了一个关于以下内容的警告: __host__ __device__ ~Foo() = default; 警告信息如下: path/to/Foo.cuh(69): warning: __host__ annotation on a ...

8得票4回答
析构函数和垃圾收集器的区别

我想知道析构函数和垃圾回收器之间是否有区别。析构函数用于在应用程序生命周期结束时处理所有未使用的对象,垃圾回收器也是这样使用的。垃圾回收器可以手动调用或在应用程序结束时执行,析构函数也是如此。两者都是可选的,并用于处理未被引用的对象。请问有谁能指出确切的区别。

13得票2回答
为什么析构函数会被执行两次?

#include &lt;iostream&gt; using namespace std; class Car { public: ~Car() { cout &lt;&lt; "Car is destructed." &lt;&lt; endl; } }; class Tax...

8得票2回答
Pimpl + QSharedPointer - 析构函数 = 灾难

昨天我遇到了一件令人沮丧的事情,让我花费了24个小时的挣扎。问题归结为出现了随机的崩溃。更加复杂的是,调试报告也完全没有规律。更加复杂的是,所有的调试信息都指向随机的Qt源代码或本地DLL文件,即每次都证明问题不在我的端上。以下是一些这样可爱的报告示例: Program received s...

13得票5回答
类内定义纯虚析构函数会导致编译错误

基类中的纯虚析构函数应该有一个定义。否则,在链接时编译器会生成从派生类析构函数调用基类析构函数的问题,从而导致链接错误。 我尝试在基类中定义纯虚析构函数,如下所示:class base { public: base() { cout &lt;&...

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

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

62得票7回答
PHP中什么情况下不会调用__destruct函数?

class MyDestructableClass { function __construct() { print "\nIn constructor\n"; $this-&gt;name = "MyDestructableClass"; } ...