destructor相关内容

删除PHP对象;还包括unset()和__destruct

这些是否正确: 任何PHP对象在运行后都会被删除(就像它的代码一样)。 unset($objectName)只是刺激无论如何都会发生的事情。删除会更快一点(从RAM内存中),但最终是完全相同的。 __destruct类似于在删除对象之前运行的事件,因此我们可以拥有它,也可以不拥有它。任何代码都可以在其中运行。 unset()与__destruct有关吗?就像它会转到该步骤( ..
发布时间:2022-05-19 13:18:12 PHP

成员数据是否应始终在析构函数中清除/清零?

是否有充分的理由不清除/清零析构函数中的对象的基本成员数据?为了整洁或隐私,这似乎应该被视为标准做法,因为有一些可能的方法可以重新读取已删除对象的数据: #include class Box { public: Box(int s) : secret(s), buffer(this) {} ~Box() {} / ..
发布时间:2022-05-19 13:06:57 C/C++开发

是否未调用PyBind11析构函数?

我有一个用PyBind11包装的c++类。问题是:当Python脚本结束时,c++destructor不会被自动调用。这会导致不整洁的退出,因为网络资源需要由析构函数释放。 作为一种解决办法,有必要显式删除Python对象,但我不明白为什么! 请解释一下这里出了什么问题,以及当Python对象被垃圾回收时如何自动调用destructor? Pybind11绑定代码: py: ..
发布时间:2022-05-19 13:03:49 C/C++开发

何时可以使用`std::Process::Exit`?

documentation of std::process::exit表示: 如果需要干净关机,建议仅在已知没有可运行的析构函数的情况下调用此函数。 可能由于我缺乏系统编程背景,我不知道是否有析构函数可以在特定的点上运行,我是否应该关心。我唯一想到的就是挂起的对文件(或其他文件)的写入操作,在这种情况下保持干净状态是个好主意。 还有什么需要注意的吗?我怀疑在更大、更复杂的程序中使 ..
发布时间:2022-05-19 12:52:29 其他开发

在C++中定义类析构函数时未定义的引用

我正在做一个小项目来提高我在C++中的面向对象编程技能-该项目只是一个简单的书籍集合,类似于一个家庭图书馆,其中书籍可以存储在虚拟书架上,分组到更大的书架上,有各自的名称等,每本书都另外有它自己的ID,是一个正整数。我正在尝试创建一个用户定义的类析构函数,我想将析构函数的实现移到源文件中,遵循这样的规则,将比一行长的实现从.hpp文件移到.hpp文件,以帮助建立生成更好、更优化、更快的代码的习惯( ..
发布时间:2022-05-19 12:35:41 C/C++开发

向向量添加时析构函数内部的双重释放

嘿,我在鼓机上工作,矢量有问题。 每个序列都有一个样本列表,这些样本以向量的形式进行排序。然而,当样本在向量上被PUSH_BACK时,该样本的析构函数被调用,并导致双重释放错误。 以下是示例创建代码: class XSample { public: Uint8 Repeat; Uint8 PlayCount; Uint16 Beats; Uin ..
发布时间:2022-05-19 12:23:52 C/C++开发

何时使用=DEFAULT使析构函数成为默认函数?

尽管构造函数使用=Default对我来说很清楚(即在存在其他构造函数的情况下强制编译器创建默认构造函数),但我仍然无法理解这两种析构函数的区别: 使用=Default的 未显式定义并由编译器自动生成的。 我唯一想到的是,组1的析构函数可以定义为虚拟的,但组2总是非虚拟的。那么,这是他们之间唯一的区别吗?是否存在编译器不生成析构函数,但使用=Default强制编译器生成析构函数的情况? ..
发布时间:2022-05-19 12:11:54 C/C++开发

如果析构函数有副作用,并且对象是从另一个静态对象的析构函数访问的,该如何进行静态反初始化?

有一个简单且众所周知的模式可以避免静态初始化失败,如section 10.13 of the C++ FAQ Lite中所述。 在此标准模式中,存在一种权衡,要么构造的对象永远不会被析构(如果析构函数没有重要的副作用,这不是问题),要么不能从另一个静态对象的析构函数安全地访问静态对象(参见section 10.14 of the C++ FAQ Lite)。 所以我的问题是:如果一个静 ..

关于析构函数中对象生存期的说明

Another question引用C++标准: 3.8/1&q;类型T的对象的生存期在以下情况结束:-如果T是具有非平凡析构函数的类类型(12.4),则析构函数调用 开始,或者-对象占用的存储被重复使用,或者 已发布。&Quot; 这似乎意味着不允许从析构函数访问对象的成员。然而,这似乎是错误的,事实更像是Kerrek SB的回答中所解释的: 成员对象在构造函数体运行之前激活, ..
发布时间:2022-05-19 11:54:48 C/C++开发

Python__Enter__/__Exit__vs__init__(或__new__)/__del__

我已经搜索过了,但我找不出任何好的理由来使用python的__enter__/__exit__而不是__init__(或__new__?)/__del__。 我知道__enter__/__exit__旨在与with语句一起用作上下文管理器,with语句非常好。但与此对应的是,这些块中的任何代码都只在该上下文中执行。通过使用这些而不是__init__/__del__,我似乎是在与调用者创建一个他们 ..
发布时间:2022-05-19 11:38:55 Python

使用基类指针创建对象时,缺少派生类析构函数

在下面的代码示例中,未调用派生类析构函数。知道为什么吗? 我有一个具有虚函数的基类。现在,我使用基类指针来创建派生类的新对象。我的理解是,当销毁派生类对象时,首先调用派生类的析构函数,然后调用基类。然而,我只看到基类的析构函数被调用。有人知道我做错了什么吗,或者我对C++的理解在哪里不正确? #include #include using namesp ..
发布时间:2022-05-19 11:31:04 C/C++开发

为什么C++对象有一个默认的析构函数?

例如,当我没有声明构造函数时,编译器将为我提供一个没有参数和定义(空体)的默认构造函数,因此不会采取任何操作。 那么,例如,如果我完成了一个对象,默认的析构函数不会重新分配(释放)该对象使用的内存吗?如果它没有,为什么我们会得到它? 而且,可能同样的问题也适用于默认构造函数。如果它什么也不做,为什么默认情况下会为我们创建它? 推荐答案 说编译器生成的默认构造函数不执行任何操作是 ..
发布时间:2022-05-19 11:08:59 C/C++开发