草庐IT

delete-non-virtual-dtor

全部标签

c++ - 错误的 "control reaches end of non-void function"gcc 警告怎么办?

$catt.cppintsign(inti){if(i>0)return1;if(i==0)return0;if(i我该怎么办?停止使用-Wall,因为它显然是错误的?最后加个假的return0?用“else”子句使代码困惑? 最佳答案 如果您不想添加“else”子句,因为它们会使代码变长,那么您可能想删除最后的“if”并使代码更短:intsign(inti){if(i>0)return1;if(i==0)return0;return-1;//i或者,如果您真的是在自己计算“符号”,而这并不是某个较长示例的简化:intsign(in

c++ - 是否有必要为 char 数组调用 delete[] 与 delete?

我正在使用一个同事编写的库,发现valgrind正在吐出与delete相关的错误。问题是有像这样的字符数组分配char*s=newchar[n];稍后跟进deletes而不是delete[]s他告诉我,区别实际上是delete[]s会在s中的每个位置调用对象的析构函数(如果它有的话),在这种情况不是因为它是原始类型。我相信这是真的。所以deletes本身并不是真正的错误,valgrind只是非常彻底。它仍然肯定会释放与s关联的所有内存吗? 最佳答案 如果您使用new[]分配数组,则必须使用delete[]销毁它。一般来说,函数ope

c++ - C++ 中的内存泄漏(通过 new+delete)

为了使应用程序没有内存泄漏,C++项目中new的数量是否与delete的数量匹配? 最佳答案 如果您的意思是您需要相同数量的delete实例吗?在您的源代码中,因为您有new的实例,那就不要。你可以有对象new在多个地方编辑,但所有这些对象deleted通过同一行代码。事实上,这是一个常见的习语。不同类型的智能指针通常采用许多不同的对象new在用户代码和delete的许多地方编辑它们来自库代码中的一个地方。编辑从技术上讲,每个成功的内存分配调用都需要与从原始分配调用中获取返回指针的分配调用相匹配。大多数new表达式导致调用opera

c++ - "Non-pointer POD"C++ 类型

是否有一个类/结构的术语既简单又标准布局但也没有指针成员?基本上我想指的是“真正的”普通旧数据类型。我可以从内存中获取数据并将其存储在磁盘上,然后读回内存以供以后处理,因为它只不过是整数、字符、枚举等的集合。有没有办法在编译时测试一个类型是否是“真正的”普通旧数据类型?相关:WhatarePODtypesinC++?WhatareAggregatesandPODsandhow/whyaretheyspecial? 最佳答案 这可能取决于结构的语义。我可以想象一个具有int字段的结构是一些volatile临时数据存储(或缓存)的键。你

c++ - 附加调试器时 unique_ptr dtor 调用速度慢得离谱 (msvc)

structtest_struct{test_struct(){}~test_struct(){}};#include#include#includeintmain(){printf("ctorbegin\n");{std::vector>test_vec;constintcount=100000;for(autoi=0;i我正在使用VS2010,发现了一些荒谬的性能问题。上面的代码在调试和发布版本(ctrl+f5)中都运行良好,但是当附加调试器(f5)时,dtor调用unique_ptr类的速度慢得无法忍受。结果机器代码是相当优化的,所以我不认为这是编译器问题而不是调试器问题,但我不

成功解决:ValueError Cannot assign non-leaf Tensor to parameter ‘weight‘

成功解决:ValueErrorCannotassignnon-leafTensortoparameter‘weight‘欢迎大家来到安静到无声的《模式识别与人工智能(程序与算法)》,如果对所写内容感兴趣请看模式识别与人工智能(程序与算法)系列讲解-总目录,同时这也可以作为大家学习的参考。欢迎订阅,优惠价只需9.9元,请多多支持!目录成功解决:ValueErrorCannotassignnon-leafTensortoparameter‘weight‘错误问题解决思路推荐专栏错误问题在推理yolo的coco数据集出现了以下错误:ValueError:Cannotassignnon-leafTen

【Vue Error】Virtual script not found, may missing <script lang=“ts“> “allowJs“: true / jsconfig.json

【VueError】Virtualscriptnotfound,maymissing<scriptlang=“ts“>“allowJs“:true/jsconfig.json一、问题描述二、出现原因翻译过来意思就是:有可能在配置中没有添加允许JS的配置(allowJs:true)三、解决方案找到jsconfig.json文件,添加以下代码:"allowJs":true,成功解决!

c++ - std::auto_ptr、delete[] 和泄漏

为什么这段代码不会导致内存泄漏?intiterCount=1000;intsizeBig=100000;for(inti=0;ibuffer(newchar[sizeBig]);}WinXPsp2,编译器:BCB.05.03 最佳答案 因为你(不)幸运。auto_ptr调用delete,而不是delete[]。这是未定义的行为。尝试做这样的事情,看看你是否幸运:structFoo{char*bar;Foo(void):bar(newchar[100]){}~Foo(void){delete[]bar;}}intiterCount=1

c++ - 为什么我会收到编译错误 "use of deleted function ' std::unique_ptr ...”

我收到一个巨大的编译错误信息c:\mingw\include\c++\6.1.0\bits\predefined_ops.h:123:18:error:useofdeletedfunction'std::unique_ptr::unique_ptr(conststd::unique_ptr&)[with_Tp=Deduction;_Dp=std::default_delete]'{returnbool(_M_comp(*__it1,*__it2));}当我将自定义比较器传递给STLset_difference函数时。我的代码:structValue{std::stringded_cod

c++ - 当 `virtual` 是一个相当大的开销时,是否有任何经验法则?

我的问题基本上完全在标题中陈述,但是让我详细说明。问题:也许值得重新措辞,virtual多么复杂/简单方法必须是,使机制产生相当大的开销?这有什么经验法则吗?例如。如果需要10分钟,使用I/O,复杂if语句、内存操作等,这不是问题。或者,如果您写virtualget_r(){returnsqrt(x*x+y*y);};并在循环中调用它,您会遇到麻烦。我希望这个问题不是太笼统,因为我寻求一些笼统但具体的技术答案。要么很难/不可能说出来,要么虚拟调用占用了太多的时间/周期资源,而数学需要这个,I/O这个。也许一些技术人员知道一些通用数字进行比较或进行一些分析并可以分享一般结论。尴尬的是我不