草庐IT

destroy_all

全部标签

c++ - 对齐 : warning C4316 in all classes that have aligned members

今天我遇到了很多麻烦,因为我跟踪了一个非常隐蔽的腐败漏洞。我想如果我真的注意警告就不会那么难找到它,但由于找不到有关为什么弹出此特定警告的相关信息,我让它滑动了,这是一个错误。所以这是VisualStudio2013给我的有罪警告:warningC4316:objectallocatedontheheapmaynotbealigned16它是在通过const引用将align(16)临时传递给构造函数时生成的,如以下代码所示:classVector{};__declspec(align(16))classVectorA{};classShape{public:Shape(constVec

c++ - std::allocator 中 "destroy" "destructor" "deallocate"之间的区别?

在C++std::allocator中,有三个方法与一个共同的概念相关:解除分配销毁析构函数我想知道:从内存管理的角度来看,它们之间有何不同?我什么时候应该使用这个而不是那个?谢谢!编辑:更具体的疑问:一开始不好意思笼统地说,这里有一些我不明白的地方。析构函数是做什么的?文档没有说到析构函数调用时内存是否会自动释放destroy用于调用对象的析构函数,这里的“对象”是什么意思?再次感谢! 最佳答案 只是来自cppreference.comdocumentation的简短描述为我非常清楚地解释差异"1.Whatdoesdestruct

c++ - 如果对象是普通可构造/可破坏的,是否允许 STL 容器跳过调用 allocator::construct 和 allocator::destroy?

问题在标题中。容器是否允许这样做,或者分配器的方法是否保证被调用,即使对象是微不足道的可构造/可破坏的?我确实尝试搜索此内容,但空手而归...但如果重复,请告诉我。 最佳答案 §23.2.1[container.requirements.general]/p3:Forthecomponentsaffectedbythissubclausethatdeclareanallocator_type,objectsstoredinthesecomponentsshallbeconstructedusingtheallocator_trait

c++ - c++17 中 std::destroy_at() 的用法?

我有一个简单的代码片段,它试图使用std::destroy_at()释放内存:#include#includeusingnamespacestd;classbase{public:~base(){cout有人可以指导我如何使用destroy_at()来释放内存吗?对于原始数据类型也观察到相同的行为。使用最新的VS2017编译器。 最佳答案 std::destroy_at()并不意味着根据[specialized.destroy]p1释放内存它旨在调用对象的析构函数:templatevoiddestroy_at(T*location)

c++ - vector < vector > : verify that all have equal sizes

是否有std/boost算法来验证一个vector中的所有vector是否具有相同的大小?推而广之,所有元素的属性都相同吗?在下面的示例中,我使用了我正在寻找的假设的std::all_equal:typedefstd::vectorLine;std::vectorlines;lines.push(Line(10));lines.push(Line(11));autoequalLengths=std::all_equal(lines.begin(),lines.end(),[](constLine&x){returnx.size();});(并且通过扩展:std::vectorvec;a

c++ - 为什么 C++17 destroy()/destroy_n() 函数向前运行(而不是向后运行)?

在C++17中,destroy()和destroy_n()运行一系列对象的析构函数。但是根据cppreference这是以前向方式完成的,即templatevoiddestroy(ForwardItfirst,ForwardItlast){for(;first!=last;++first)std::destroy_at(std::addressof(*first));}但是数组的销毁是reversetotheorderofconstruction按照标准要求。那么destroy()和destroy_n()的用例是什么?有没有和正常的数组销毁不一致的原因,或者这是cppreference

解决Java --add-opens java.base/java.lang=ALL-UNNAMED的具体操作步骤

Java--add-opensjava.base/java.lang=ALL-UNNAMED在Java9及以后的版本中,引入了模块化系统,它允许将代码和资源划分为多个模块以提高代码的可维护性和安全性。然而,由于模块的隔离性,某些代码可能无法在模块之间进行正常的交互。这时,我们可以使用Java --add-opens选项来解决此类问题。什么是--add-opens选项?--add-opens是Java9引入的一个命令行选项,它允许我们在模块之间打开指定的包,以便其他模块可以访问这些包中的类和成员。特别地,--add-opens选项用于在指定的模块中打开指定的包,并将其对所有模块的访问权限设置为“

c++ - std::bitset::all 替代之前的 C++11 编译器

我想使用std::bitset::all但不幸的是我的编译器早于C++11。我知道我可以通过在一个循环中检查是否设置了我的std::bitset的所有位来模拟该功能。例如,templateboolall(std::bitsetconst&bs){inthits(0),sz(bs.size());for(inti(0);i问:是否有比上面显示的更合适的std::bitset::all替代旧版C++11编译器的实现。 最佳答案 只需检查count等于size:templateboolall_set(conststd::bitset&b)

c++ - 在 C++ 中向枚举添加 "all"选项的好的设计是什么?

我有一个枚举类如下:enumclassAge{Eleven,Twelve,Thirteen};然后我有一个方法叫做vectorGetPeopleOfAge(Ageage).什么是好的设计,以便开发人员可以调用它并让人们拥有11、12和13?我可以称它三次,这很糟糕,但我确实想提一下我考虑过它。我可以添加All枚举并检查我的方法,但我不喜欢用All这样的枚举污染枚举的想法。只是为了让我的案子奏效。我知道这是解决这个问题的常用方法,有些人可能不同意我的看法,但对我来说感觉很老套,我正在寻找替代方法。也许我应该使用枚举以外的东西? 最佳答案

初学者使用Xcode的一些问题解决,以及A function declaration without a prototype is deprecated in all versions of C处理

今天我使用Xcode创建了一个项目,并在其中生成了一个.c文件。这个文件运行起来没有问题,于是我生成了第二个.c文件,发现编译错误。原因是Xcode每个target都只能有一个main函数,如果需要在一个项目内创建互不影响的小项目,应该使用创建target的方式,否则会报错。另外还有一个问题:许多c的教程中主函数会这么写intmain(){}事实上这在Xcode中是会提示错误的,具体报错为:AfunctiondeclarationwithoutaprototypeisdeprecatedinallversionsofC这是因为在c语言中,没有参数的函数括号内要写void,这是唯一正确的写法,不