jjzjj

delete-operator

全部标签

c++ - 运算符重载 "operator T * ()"产生比较运算符?

classTest{public:operatorTest*(){returnNULL;};};intmain(){Testtest;if(test==NULL)printf("Wtfhappenedhere?\n");return0;}这段代码如何编译?Test是如何获得比较运算符的?是否有一些隐式转换?重载运算符甚至意味着什么(和做什么)? 最佳答案 重载运算符添加了从Test到Test*的转换。由于没有定义将Test和NULL作为参数的比较运算符,因此会尝试任何存在的转换运算符。operatorTest*返回一个与NULL相当

c++ 调用 delete[] 导致崩溃

我正在分配一个数组,然后当我调用delete[]时它导致程序崩溃,当我不调用delete时程序运行正常。这是我的代码MyObject*myArray=newMyObject[numPoints];delete[]myArray;我非常困惑,所以任何帮助将不胜感激此外,当我调试时,我收到错误消息“检测到堆损坏:在0x000032E90处的正常block(#48)之后。CRT检测到应用程序在堆缓冲区结束后写入内存。”解决方案!:我在初始化数组时没有足够的空间。出于某种原因,我仍然可以向数组添加内容,但在调用析构函数时它会崩溃。 最佳答案

c++ - 如果重载了一个new但是没有加载对应的delete会怎样?

任何人都可以解释如果在C++中重载了new但未加载相应的delete会发生什么情况? 最佳答案 这只是对象构造抛出异常时的问题,在C++115.3.4/18中有描述:Ifnounambiguousmatchingdeallocationfunctioncanbefound,propagatingtheexceptiondoesnotcausetheobject’smemorytobefreed.[Note:Thisisappropriatewhenthecalledallocationfunctiondoesnotallocatem

c++ - 指针和数组上 operator[] 的索引参数类型

指针上运算符[]的自然参数类型是什么,如:structfoo{value_toperator[](i){returndata[i];}value_t*data;};我知道我可以输入任何整数类型,但是数组索引的自然类型是什么,即。哪个不会导致隐式转换? 最佳答案 指针上的operator[]可以是任何整数表达式总的来说,ptrdiff_t在技术上是你想要的,如果data和data+i是任意两个任意指针中的任意一个,并且指向任意内存块,因为ptrdiff_t被定义为用于保存差异的有符号类型两个指针之间(但是,不能保证不会溢出:ptrdi

c++ - 实现Matlab的冒号: operator in C++ expression templates class

我正在实现一个C++表达式模板库。我已经设置了一个适当的SubMatrixExpr类来收集矩阵中的元素,启用类似的语法B=SubMatrix(A,1,3,2,10);相当于Matlab的B=A(1:3,2:10);当然,Matlab的语法比我的要舒服得多。所以我的问题是有没有可能在C++中设置Matlab的冒号:运算符?非常感谢您。 最佳答案 简短的回答:没有。冒号不是有效的C++运算符,因此不能重载。即使可以,它仍然不可能轻松实现您的需求,因为它肯定会优先于逗号运算符,这将使您的表达式位于A((1:3),(2:10))行中。,如果

c++ - operator= 的返回类型 - 引用还是值?

从函数“operator=”返回有什么区别byreferencebyvalue?在下面的示例中,这两个版本似乎都产生了正确的结果。#includeusingnamespacestd;classCComplexNumber{floatm_realPart;floatm_imagPart;public:CComplexNumber(floatr,floati):m_realPart(r),m_imagPart(i){}//thefollowingcanbealso//CComplexNumber&operator=(constCComplexNumber&orig){CComplexNum

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

k3s x GitLab Runner Operator,GitLab CI 云原生构建新体验

GitLabCI是非常常用的一款CI/CD工具,只需要在.gitlab-ci.yml 文件中用YAML语法编写CI/CD流水线即可。而GitLabCI能够运行的关键组件是GitLabRunner。GitLabRunner是一个轻量级、高扩展的代理,主要用来执行GitLabCI/CD流水线中的Job,然后将Job的执行结果返回GitLab实例。GitLabRunner的安装方式有很多种,包括安装包、Docker、HelmChart等,本文将用GitLabRunnerOperator的方式来在k3s上安装GitLabRunner,并执行CI/CD流水线。关于其他安装方式的详情,可以查看 GitLa

c++ - 使用 "operator T*()"而不是 "T* operator->()"进行成员访问

表达式x->y要求x是指向完整类类型的指针,或者当x是类的实例时,需要为x定义的operator->()。但是如果是后者,为什么不能我可以使用转换函数来代替(即将对象x转换为指针)?例如:structA{intmi;operatorA*(){returnthis;}};intmain(){Aa;a[1];//ok:equivalentto*(a.operatorA*()+1);a->mi;//ERROR}这给出了一条错误信息:错误:“->”的基操作数具有非指针类型“A”但问题是,为什么它不像a[1]那样使用a.operatorA*()呢? 最佳答案