C/C++开发

C++的概念和Rust的特征有什么相似之处和不同之处?

在Rust中,抽象的主要工具是特征。在C++中,有两种抽象工具:抽象类和模板。为了摆脱使用模板的一些缺点(例如,难以读取错误消息),C++引入了概念,它们是"named sets of requirements"。 这两个功能似乎非常相似: 定义特征/概念是通过列出需求来完成的。 两者都可用于绑定/限制泛型/模板类型参数。 Rust特征和带有概念的C++模板都是单一化的(我知道Ru ..
发布时间:2022-05-25 18:47:06 C/C++开发

为什么这段代码被认为是VLA,尽管它使用的是int?

我以为我理解了VLA是什么,直到我在这里看到一个关于动态内存分配与可变长度数组之间的区别的问题。因此,我对动态内存分配没有任何问题,至少目前是这样,但我不理解的是为什么这段代码被认为是VLA: int size = 10; // or whatever int my_array [size] ; // why this is a VLA 更神秘的是,这甚至被认为是VLA const ..

C++删除动态数组的最后一个元素

在C++中,我获取了n个元素的动态数组 int* a = new int[n]; 在将数组所有元素左移后,最后一个元素,即a[n-1]是无用的,我想删除它。 右移后,我需要删除数组的第一个元素,并有一个指向第二个元素的指针,即我需要创建一个长度为n-1的数组。 我如何才能做到这一点? 推荐答案 您需要分配一个新数组,并将原始数组的元素复制到新数组。 这里是一个演示程序 ..
发布时间:2022-05-23 14:01:04 C/C++开发

C++什么是指针=新类型&Q;,而不是&Q;指针=新类型[]?

在许多教程中,关于动态内存的第一个代码样例是这样开始的: int * pointer; pointer = new int; // version 1 //OR pointer = new int [20]; // version 2 他们总是继续解释第二个版本的工作原理,但完全避免谈论第一个版本。 我想知道的是,pointer = new int创建了什么?我能用 ..
发布时间:2022-05-23 13:49:19 C/C++开发

如何在QT中睡眠/暂停?

如何在Qt中“睡眠/暂停”。 我希望用户界面在代码休眠时保持响应。 while(Tablet.IsConnected() == false){ LogText("[Prep] Tablet not turned back on... Retrying..."); //Sleep for three seconds here } LogText("[Prep] Table ..
发布时间:2022-05-23 13:22:18 C/C++开发

Msky()是否将周期分配给其他线程?

在多线程应用程序中,是 while (result->Status == Result::InProgress) Sleep(50); //process results 优于 while (result->Status == Result::InProgress); //process results ? 通过这一点,我在问,第一种方法会在等待结果的同时礼貌地对待其他线程,而 ..
发布时间:2022-05-23 12:53:52 C/C++开发

_Slear()在C++中不起作用

我试图编写简单的代码,但每当我调用函数_sleep()时,它都不起作用。我现在已经在两个不同的项目中尝试了它,每次我使用它时,它都会给我一个错误:1 ‘_睡眠’:此函数或变量已被较新的库或操作系统功能取代。考虑改用睡眠疗法。有关详细信息,请参阅联机帮助。 我尝试了许多其他的东西,比如Sleep()、sleep()和一些随机的垃圾,但最终都不起作用。如果有另一个命令会暂停控制台一段时间, ..
发布时间:2022-05-23 12:22:03 C/C++开发

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

是否有充分的理由不清除/清零析构函数中的对象的基本成员数据?为了整洁或隐私,这似乎应该被视为标准做法,因为有一些可能的方法可以重新读取已删除对象的数据: #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++开发

在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)。 所以我的问题是:如果一个静 ..