面向对象编程中的一种特殊方法,在对象被销毁时调用
我有一个结构: 结构持有者 { 整数值; std::unordered_map num_to_addr; }; 我动态分配一个结构持有者: 结构持有者*句柄=新的结构持有者; 我工作并且
如何在 C 中模拟构造函数和析构函数行为(对于特定数据类型)
我有一个 C (嵌套)结构,我想在我的代码中自动初始化和销毁它。 我正在 Linux 上使用 GCC (4.4.3) 进行编译。我隐约知道GCC函数属性的构造...
下面的代码重现了我遇到的问题,MSVC 2022: #包括 结构体A { 静态无效消息() { std::cout << "A::message()\n"; } struct...
#包括 #包括 班级学生 { int *arr_roll; 民众: 学生(size_t a){ arr_roll = new int(a); } 〜学生(){ std::cout<<&...
Vec 类 { 民众: 无符号整型暗淡; 浮动*元素; // 构造函数 Vec() : 暗淡(0), 元素(nullptr) {} Vec(unsigned int dim, ...) : dim(dim), elements(new float[dim]) ...
这是我遇到过的一件有点奇怪的事情。这是我正在制作竞技场分配器和智能指针的项目的一部分,目标是将所有内容包装在过多的 am...
.obj 文件中有关 FreeType 库类析构函数的未解析外部 T::~T
以或多或少的良好方式解决了这个问题之后: 如何将 Borland 6 C++ 项目从包含 indy.bpi 更新为 indy60.bpi? ...我现在遇到另一个困难: 我现在有“unreso...
#包括 使用命名空间 std; 类摘要{ 受保护: int* arr; 整数大小; 民众: 摘要(int s = 10) { 大小=s; arr = new int[大小]; } ...
我有以下代码: #包括 使用命名空间 std; A类{ 民众: A() { 计算 << "A::A()" << endl;} ~A() { cout << "A::~A()" << endl; thr...
如果删除析构函数,编译器还会隐式生成默认构造函数吗? GCC可以编译以下代码: 结构A { ~A() = 删除; 整数x; 整数y; 维尔...
当我运行下面的代码时,它崩溃了。如果我删除析构函数,它就会起作用。为什么? #包括 #包括 #包括 使用命名空间 std; vectmy 类...
我正在研究C++智能指针。我做了以下测试: TView 类使用指向 TMat 类的智能指针。 我发现 TMat 析构函数被调用了不止一次。我不明白...
在 Java 中我们可以做类似 override Finalize() 的事情,在 C++ 中我们可以做类似 ~Someclass() 的事情, 但是我怎样才能在 dart 中做到这一点,我阅读了 https://www.dartlang.org/ 中的文档,但没有找到答案。
我目前正在尝试了解类和构造函数/析构函数。我理解两者的作用,但我在析构函数方面遇到了困难,因为我想不出实际的应用......
良好编码实践的一个重要经验法则是 每个新的都必须与删除相匹配 在上一个问题中讨论过。通常,我们将此规则封装在 RAII 类中,例如 std::
良好编码实践的一个重要经验法则是 每个新的都必须与删除相匹配 在上一个问题中讨论过。通常,我们将此规则封装在 RAII 类中,例如 std::
问题与这个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;
std::enable_shared_from_this:是否允许在析构函数中调用shared_from_this()?
#包括 #包括 结构 A :公共 std::enable_shared_from_this { 〜A() { 自动 this_ptr =共享_from_this(); // std::bad_weak_ptr 异常...
假设以下结构: 模板 结构体A{ T* 指针; 无效清除数据(){ //删除指针所指向的数据 数据->~T(); //调用析构函数? 指针=空...
虽然对构造函数使用 =default 对我来说很清楚(即强制编译器在其他构造函数存在时创建默认构造函数),但我仍然无法理解它们之间的区别...