destructor 相关问题

面向对象编程中的一种特殊方法,在对象被销毁时调用

Dart 中对象销毁之前如何做一些事情?

在 Java 中我们可以做类似 override Finalize() 的事情,在 C++ 中我们可以做类似 ~Someclass() 的事情, 但是我怎样才能在 dart 中做到这一点,我阅读了 https://www.dartlang.org/ 中的文档,但没有找到答案。

回答 3 投票 0

类析构函数的实际应用

我目前正在尝试了解类和构造函数/析构函数。我理解两者的作用,但我在析构函数方面遇到了困难,因为我想不出实际的应用......

回答 6 投票 0

Qt 与 RAII 设计模式不兼容吗?

良好编码实践的一个重要经验法则是 每个新的都必须与删除相匹配 在上一个问题中讨论过。通常,我们将此规则封装在 RAII 类中,例如 std::

回答 1 投票 0

Qt 中的 RAII(标题必须至少 15 个字符。)

良好编码实践的一个重要经验法则是 每个新的都必须与删除相匹配 在上一个问题中讨论过。通常,我们将此规则封装在 RAII 类中,例如 std::

回答 1 投票 0

C++ GCC 4.3.2 字符数组向量错误

问题与这个bug类似 关于在 C++ 中将数组存储在 std::vector 中的问题 但出于不同的原因(见下文)。 对于以下 C++ 示例程序: #包括 问题与此错误类似 关于在 C++ 中将数组存储在 std::vector 中的问题 但是出于不同的原因(见下文)。 对于以下 C++ 示例程序: #include <vector> int main(int c_, char ** v_) { const int LENGTH = 100; std::vector<char[LENGTH]> ca_vector; return 0; } GCC 4.2.3 编译干净。 GCC 4.3.2 发出以下错误: /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:在函数 'void std::_Destroy(_Tp*) [with _Tp = char [ 100]]': /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:103:从 'void std::_Destroy(_ForwardIterator, _ForwardIterator) [with _ForwardIterator =字符(*)[100]]' /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:128:从 'void std::_Destroy(_ForwardIterator, _ForwardIterator, std::allocator&) 实例化) [with _ForwardIterator = char (*)[100], _Tp = char [100]]' /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_vector.h:300:从 'std::vector::~vector() 实例化 [with _Tp = char [100],_Alloc = std::allocator]' test.cpp:7:从这里实例化 /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:88:错误:请求“* __pointer”中的成员“~char [100]” ,它是非类类型“char [100]” 原因显然是 include/g++-v4/bits/stl_construct.h 中的这一点 template inline void _Destroy(_Tp* __pointer) { __pointer->~_Tp(); } 我认为,这是由于不正确的数组到指针衰减而被调用的。 我的问题是: 语言标准中是否有任何内容阻止在 std::vector 中存储数组?或者这只是那个特殊 GCC 版本中的错误? 我确实相信这应该可以编译(即 4.2.3 是正确的)。 谢谢 马丁 是的,标准中有一些内容停止使用数组使用C++98标准草案 第 23 条集装箱 这些组件中存储的对象类型必须满足CopyConstructible的要求 类型 (20.1.3),以及可分配类型的附加要求。 其中组件是各种容器 20.1.3 包括类型必须具有析构函数的要求。 我认为向量必须复制、分配和删除元素。 C++ 如何知道复制或删除 char[] ? 不,这是不允许的,就像您链接到的问题中不允许这样做一样(我不明白“原因有何不同”)。这两个问题中的任何一个都不是“错误”。或者至少,不是编译器中的错误。就在你的代码中。 ;) 不能将数组存储在向量中,因为向量要求其元素是可复制构造和可赋值的。 最简单的解决方案是: std::vector<boost::array<LENGTH> > ca_vector; 这样你就不必为数组/指针的故事而烦恼。 你是否真的想要这个,是另一个问题。 请让我知道这段代码的想法。您已经知道,向量也是某种数组,您不必给出初始大小。 1D vector -> std::vector<char*> ca_vector; 2D vector -> std::vector<char*,char*> ca_vector;

回答 4 投票 0

std::enable_shared_from_this:是否允许在析构函数中调用shared_from_this()?

#包括 #包括 结构 A :公共 std::enable_shared_from_this { 〜A() { 自动 this_ptr =共享_from_this(); // std::bad_weak_ptr 异常...

回答 5 投票 0

删除模板对象的数据时避免内存泄漏。 (C++)

假设以下结构: 模板 结构体A{ T* 指针; 无效清除数据(){ //删除指针所指向的数据 数据->~T(); //调用析构函数? 指针=空...

回答 1 投票 0

何时使用 =default 使析构函数默认?

虽然对构造函数使用 =default 对我来说很清楚(即强制编译器在其他构造函数存在时创建默认构造函数),但我仍然无法理解它们之间的区别...

回答 1 投票 0

为动态分配的对象调用手动析构函数后,对象仍然存在吗?

当同时创建两个对象(一个静态和一个动态)时,析构函数会同时删除它们(当对象超出范围时)? 看看下面的代码块及其

回答 1 投票 0

为什么为“错误”的对象调用析构函数?

我有这个代码: 班级测试 { 民众: 测试(整数) { 这个->num = num; std::cout << "Test constructed. Num = " << num << std::endl; } ...

回答 1 投票 0

C++ 中按值传递造成的损坏

Herbert Schildt 的 C++ IT-Tutorial 一书第 9 章第 368 页指出了以下问题: “即使您按值将对象传递给函数,在这种情况下传递的对象 sh...

回答 2 投票 0

C++ 无法理解析构函数调用

这个程序是用自定义类A设计的,当调用复制构造函数时输出1,当调用析构函数时输出0。我在程序里复制了两次,删除了两次,还是不行……

回答 1 投票 0

为什么 __del__ 不被调用两次?

我想使用对象的 __del__ 方法根据某些条件自动将对象数据写入外部数据库或本地缓存(全局字典)。上下文管理器...

回答 1 投票 0

jthread 是类成员时的销毁顺序

我有一个处理某些线程同步的类。 类 ThreadHandler { std::vector 线程; std::互斥体; std::condition_variable 简历; int some_int...

回答 1 投票 0

控制类成员布局和析构函数顺序

我的班级有两名成员。 C类{ 类型A; B型b; }; 假设没有继承。对于这门课,我担心三件事。

回答 1 投票 0

在C++链表中删除会导致无限循环[已关闭]

编辑 这是列表的正确实现。谢谢你们,特别是Agent_L,他私下里帮助了我。 正确的链表实现 #包括 #包括 #包括...

回答 3 投票 0

PHP 中是否存在不调用析构函数的情况?

这是我第一次在 stackoverflow 上发帖,但这些帖子对我帮助很大! 无论如何,关于我的问题...是否有 PHP 中的析构函数未被调用的情况?原因...

回答 3 投票 0

链表中析构函数是必须的吗?

我做了一个单链表程序。 我想知道是否需要析构函数或默认析构函数可以正常工作? 班级 { 节点*头; 节点*尾部; 民众: sll() { ...

回答 3 投票 0

如何在Delphi中模拟TFrame上的OnDestroy事件?

如何在 Delphi 中模拟 TFrame 的 OnDestroy 事件? 我天真地向我的框架添加了构造函数和析构函数,认为这就是 TForm 的作用: TframeEditCustomer = 类(TFrame) ... 酒吧...

回答 4 投票 0

`deinit` 到底什么时候被调用? (斯威夫特)

deinit 到底什么时候被调用? 是否像 C++ 一样,当最后一个引用超出范围时(通过返回、抛出或退出)保证被调用? 或者 Swift 使用垃圾收集器?

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.