草庐IT

reverse_delete_rule

全部标签

c++ - 如何将具有 "deleted"复制构造函数和赋值运算符的类放入映射中?

因为我使用的是一个不完全是C++11的编译器(VS11),所以我收到一个关于防止使用复制构造函数和赋值运算符的链接器错误。一切都很好,但问题是我不能将我的类放在std::map中,其中键是uin32_t,值是我的类。我什至尝试了emplace,但它不起作用。我正在考虑std::move将unique_ptr放入map中,但不想重新设计容器。那么有没有什么优雅的方法可以做到这一点(优雅==不像在map中放置一个虚拟对象然后在值内存中放置新的:)?代码位是这样的:std::mapm_map;//declarednotdefinedpublic:LogFileWriter(constLogF

c++ - 在 C++ 中用 new/delete 替换 malloc/free

我只是想确定一下。这是我的代码int*Image=(int*)malloc(sizeof(int)*m_Width/2*m_Height);free(Image);如果我想使用new而不是malloc和free而不是delete。这是我写的int*Image=newint[m_Width/2*m_Height];delete[]Image;对吗? 最佳答案 从技术上讲,这是正确的。然而,这是我们正在谈论的C++,动态分配数组的C++方法是使用std:vector代替:std::vectorImage(m_Width/2*m_Heig

c++ - 所有 g++ 版本的 delete[] 可能存在错误或未定义此行为?

这个问题在这里已经有了答案:Whyisitundefinedbehaviortodelete[]anarrayofderivedobjectsviaabasepointer?(5个答案)关闭4年前。我有这段代码,它给了我3个或更多元素的段错误。我在vs和clang上测试并工作(循环结束和二进制结束没有错误)。我做错了什么?或者它是一个g++错误?如果我更改delete[]线到delete[]static_cast(a);它也适用于g++。但是,在实际情况下,我不知道真正的类型,所以我不能转换成任何东西。classA{public:virtual~A(){}virtualintx()=0

c++ - 错误 : use of deleted function for overloaded template

我正在尝试模板特化,但无法确定为什么charconst*const无法在下面解析(尽管是有效类型)的原因。templateBfoo(A)=delete;templatevoidfoo(char*){}templatevoidfoo(charconst*const){}intmain(){{//typesOKcharconst*consta=nullptr;char*b=nullptr;}char*data;foo(data);//OKfoo(data);//ERRORreturn0;}错误error:useofdeletedfunction‘Bfoo(A)[withA=constcha

c++ - 为什么 new 和 delete 在 MSVC 2010 下的循环中这么慢

当我尝试在循环中创建和删除类的实例时遇到问题。迭代的执行时间是完全不同的。据我了解,这与从内存中删除对象有关。但是,这个操作的行为我不明白。为什么时间不同?我如何解决它?当我在单独的线程中删除对象时,时间是稳定的。classNODE{public:NODE(){}NODE*add(NODE*node){children.push_back(node);returnnode;}virtual~NODE(){for(vector::iteratorit=children.begin();it!=children.end();++it){delete*it;}}vectorchildren;

c++ - 为什么 "const T*"在 "void*"中被简单地转换为 "operator delete"?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Deletingapointertoconst(Tconst*)voidoperatordelete(void*);...constchar*pn=newchar,*pm=(char*)malloc(1);deletepn;//allowed!!free(pm);//errorDemo.可以理解,free()是一个函数,所以constvoid*不能转换为void*。但为什么在operatordelete(默认或重载)的情况下允许这样做?它在功能上不是错误的构造吗?

c++ - 制作 : No rule to make a header file?

我正在尝试使用名为BigInt的库创建一个项目。我的文件结构是:/Users/wen/Projects/challenge/fibonacci3/fibonacci3.cpp/Users/wen/Projects/challenge/fibonacci3/Makefile/Users/wen/Projects/include/bigint//Users/wen/Projects/include/bigint/MakefileFibonacci3Makefile截至LD_FLAGS=CC_FLAGS=#Includelibrariesinclude/Users/wen/Projects/

c++ - 我是否负责在 QImage::bits() 函数提供的指针上调用 delete?

Qt类QImage有两个版本的bits()函数,返回指向底层图像数据的指针。一个是const,另一个不是。这是thedocumentation对于非常量版本:Returnsapointertothefirstpixeldata.ThisisequivalenttoscanLine(0).NotethatQImageusesimplicitdatasharing.Thisfunctionperformsadeepcopyofthesharedpixeldata,thusensuringthatthisQImageistheonlyoneusingthecurrentreturnvalue

c++ - Visual Studio 2010 : "ConfigurationGeneral" rule is missing from the project

我想使用VisualC++2010Professional编译一个64位应用程序,但我一直收到这个错误,我不知道该怎么做:1>------Buildstarted:Project:Test,Configuration:Debugx64------1>Error:The"ConfigurationGeneral"ruleismissingfromtheproject.我在谷歌上搜索过这个问题,但所有的想法都没有解决我的问题。谢谢!如果需要这些信息,我有windows8.1Pro64bits,我使用的是visualstudio2010c++professional。编辑:尝试修复visua

c++ - MFC CArray 上的 std::reverse

我有一系列这样的点:CArraypoints;我需要颠倒点的顺序。我试过这个方法:std::reverse(&points[0],&points[0]+points.GetSize());而且它有效。然后我尝试了另一种方法:std::reverse(&points[0],&points[points.GetUpperBound()]);但它不起作用:最后一项的排序不正确。为什么? 最佳答案 这是因为STL算法采用[b,e)形式的范围(即e除外),而thefunctionyouusedreturnsthepositionofthela