问题标签 [virtual-destructor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 基类 'class std::vector<...>' 有一个非虚析构函数
我的一个 C++ 类派生自,std::vector因此它可以充当容器,还可以对其内容执行自定义操作。不幸的是,编译器抱怨析构函数不是虚拟的,我无法更改,因为它在标准库中。
我做错了整个事情(你不应从 STL 派生)还是我可以做些什么来让编译器满意?(除了停止使用 -Weffc++ :)
编辑:派生类不涉及矢量操作算法,而只是为图像矢量添加一些信息,例如“元素宽度/高度”。例如,您可以想到
您将相册主要视为具有一些元数据(标题和时间)和相册特定功能的图片集合,例如将某些照片的缩略图渲染到表面上以制作相册封面。所以恕我直言,相册 IS-A 的集合Photo,比它 HAS-A 这样的集合还要多。
我看不到在具有额外“集合”字段的getPhotoVector()方法中获得的任何好处。PhotoAlbum
c++ - 强制虚拟析构函数?C++
我在 C++ Faq lite 中没有看到这个问题的答案:
如何定义一个基类,以便每个继承它的类都需要定义一个析构函数?
我试着运行这个程序
http://codepad.org/wFcE71w3 出现错误
那么,有可能吗?
c++ - C++ 虚拟析构函数崩溃
我有以下类层次结构:
连同一个物体
有一部分代码我需要使用线程删除 MoreDerived 对象,因此必须先将其转换为 void*。在线程中,我有
非指针为 NULL,并且void* ptr 是 MoreDerived *(或至少是 Base*),但应用程序仍然崩溃......
c++ - 为什么 shared_ptr 没有虚拟析构函数?(我怎样才能解决这个问题?)
我想制作一个特殊版本,shared_ptr在创建或销毁时执行特定操作,但我的计划似乎因意识到shared_ptr析构函数是非虚拟的而被挫败,这意味着当我覆盖它时,我的指针永远不会被清理当它们的最后一个实例被销毁时。
想到的唯一替代方法是将这种行为构建到我想与我假设的 custom 一起使用的每个类中,shared_ptr这是不可行的(或在某些情况下是可能的)。
编辑:
我想要这个的原因是因为我想在 lua 中使用一些类作为 userdata 对象,并且我希望我使用这种方式的每个对象都有一个唯一的 fenv 表,当所有对对象已被移除。我计划使用指针的地址,因为它们键入包含 fenv 表的表。
假设我有一个小部件,它可以将其他小部件作为子小部件。我在 Lua 中创建了两个小部件,然后将一个设置为另一个的子小部件,并删除对子小部件的所有 lua 引用(它是一个子小部件的事实在 C++ 中处理)。GC 现在可以随时运行并移除子代。我不一定想让孩子运行它的析构函数,所以我想让它成为一个 shared_ptr。这样,在 Lua 清理之后,C++ 对象仍然可以使用它。如果我已经为其 fenv 分配了值或功能,我仍然希望能够访问它们。只有在删除对我的子小部件的最终引用时,我才希望完全删除表中的 fenv。
c++ - 如果派生中没有数据成员,C ++是否仍然需要虚拟析构函数?
假设我有这个代码
我知道虚拟析构函数会正确删除内容,但是即使派生类中没有虚拟函数且没有数据成员,使用基指针(当没有虚拟析构函数时)删除是否不好?如果这样做会发生什么?
c++ - 虚拟析构函数在特定情况下的实际必要性
C++03 5.3.5.3
在第一种选择(删除对象)中,如果操作数的静态类型与其动态类型不同,则静态类型应为操作数动态类型的基类,并且静态类型应具有虚拟析构函数或行为未定义.
这就是理论。然而,这个问题是一个实际的问题。如果派生类不添加数据成员怎么办?
问题:是否有任何现有的实现,这真的很危险? 如果是这样,您能否描述一下内部是如何在该实现中实现的,这会导致该代码崩溃/泄漏或其他什么?我求你相信,我发誓我无意依赖这种行为:)
c++ - 错误 LNK2019 - 抽象类中的虚拟析构函数
可能重复:
C++ 中的纯虚析构函数
我有两个类:抽象的“Game”类和派生的“TestGame”类。TestGame 中的所有功能都是单独实现的(为了让它编译)。我只收到一个错误:
TestGame.obj:错误 LNK2019:未解析的外部符号“public:virtual __thiscall Game::~Game(void)”(??1Game@@UAE@XZ)在函数“public:virtual __thiscall TestGame::~TestGame(void)”中引用" (??1TestGame@@UAE@XZ)
这是我的类定义:
我已经尝试了几件事,但我觉得也许我错过了一些关于抽象和派生类如何工作的基本知识。
c++ - 从析构函数间接调用虚函数
让我声明一下:我对构造函数或析构函数中的虚函数调用有清晰的理解。
在下面的代码中,我试图避免虚拟析构函数仅用于实验目的。
现在我的问题是:
在 main 中,对 Destroy fun 的调用调用了正确的虚函数。我希望对 Destroy Function 的任何调用都应该调用正确的虚拟乐趣。
但是放置在 Base 析构函数调用的 Base 虚函数中的同一个 Destroy 函数。
这与静态绑定或编译器优化有关吗?
.
.
c++ - 使用虚拟析构函数,我是否需要为每个子类显式声明一个虚拟析构函数?
我有一个场景,我正在编写一些深入的面向对象的代码,具有多层抽象基类,我想知道是否必须为每个显式声明一个析构函数。
编译器会生成一个已经是虚拟的默认值,还是我必须告诉它?
c++ - 析构函数和python
我有一些BaseC++ 课程。我使用 boost::python 将它导出到 python 中。但是虚拟析构函数呢?任何基类都应该有虚拟析构函数以避免错误的内存释放,对吧?我忘记了这一点,并Base没有使用析构函数进行编写。一切正常,但有很多内存泄漏。
现在我添加了:
在 python 中导入我的模块后,我收到一个错误:
ImportError:Base.so:未定义符号:_ZTI6Base
我做错了什么?而且,据我了解,该错误是由于缺少 py-module 的析构函数导出器而导致的。