草庐IT

delete-operator

全部标签

C++:为什么为字符串定义了 'operator+=' 而不是 'operator+'?

这个问题在这里已经有了答案:Whatarethebasicrulesandidiomsforoperatoroverloading?(8个答案)关闭8年前。为什么operator+=是为std::string定义的,但是operator+没有定义?请参阅下面我的MWE(http://ideone.com/OWQsJk)。#include#includeusingnamespacestd;intmain(){stringfirst;first="Day";first+="number";cout

c++ - operator>> 可以读取 int hex AND decimal 吗?

我可以说服C++中的operator>>读取hex值AND和decimal值吗?下面的程序演示了读取十六进制是如何出错的。我希望相同的istringstream能够读取hex和decimal。#include#includeintmain(intargc,char**argv){intresult=0;//std::istringstreamis("5");//thisworksstd::istringstreamis("0x5");//thisfailswhile(is.good()){if(is.peek()!=EOF)is>>result;elsebreak;}if(is.fai

c++ - 对于 vector 中的指针,我们应该在删除之前还是之后删除?

我们应该在erase之前还是之后删除。我的理解是两者都可以。这是正确的吗?另外,有没有我们不想在删除元素的同时删除它的情况?我相信一定有,否则,erase会很乐意承担责任。std::vectorbar;...for(vector::iteratoritr=bar.begin();itr!=bar.end();itr++){delete(*itr);//beforeORbar.erase(itr);delete(*itr);//after???} 最佳答案 “itr”必须这样使用;for(vector::iteratoritr=bar

c++ - 为什么 operator = 不从模板类继承

我有以下模板代码:classClassName{};templateclassTemplatePtr{public:voidoperator=(T*p){}};classTemplatePtr_ClassName:publicTemplateePtr{public:~TempaltePtr_ClassName();};voidTest(){TemplatePtr_ClassNamedata;data=newClassName;}但编译失败并显示错误消息(VS2008):errorC2679:binary'=':nooperatorfoundwhichtakesaright-handop

c++ - 我应该删除作为参数传递给函数的指针吗?

所以我正在阅读一些关于删除指针参数的StackOverflow答案,尤其是这些参数(1、2),因为我正在构建一个需要指针作为参数的函数。该函数的简化版本如下:voiddraw(Shape*b){//Drawscode....}不,我在这里感到困惑的是删除。例如,如果函数是这样调用的:Shape*c;draw(&c);然后我就不用删除任何东西了。但是如果是这样的话:draw(newShape{});那我就去吧。所以基本上,我的问题是,如果参数中使用了new关键字,我应该如何删除。函数中没有可能抛出的异常,因此不需要RAII。有任何想法吗?请不要提出任何涉及智能指针的建议,因为那是我已经要

c++ - "invalid comparator": error when overloading the "<" operator

我有一个类需要排序。使用此类的vector,排序时出现“无效比较器”错误。我在我的类中重载了“遵循严格的弱排序。如本post所述.sort需要严格的弱排序。你的comparator不是一个。除其他事项外,对于严格的弱排序,comp(x,x)必须为false。这是我的代码:booloutlierScore::operator这是重载的运算符函数,它所做的本质上是尝试按离群值分数升序排序,核心距离用于打破离群值关系,以及用于打破核心距离关系的ID。StackTrace揭示了这个阶段出现的错误。templateconstexprbool_Debug_lt_pred(_Pr&&_Pred,_T

C# 垃圾收集 -> 到 C++ 删除

我正在将C#项目转换为C++,并且对使用后删除对象有疑问。在C#中,GC当然负责删除对象,但在C++中,它必须使用delete关键字显式完成。我的问题是,是否可以只跟踪每个对象在整个方法中的用法,然后在它超出范围(即方法结束/重新分配)时立即将其删除?我知道GC在删除之前会等待一定大小的垃圾(~1MB);它这样做是因为使用delete时有开销吗?由于这是我正在创建的游戏,因此每秒可能会创建和删除大量对象,因此最好跟踪超出范围的指针,一旦该大小达到1MB就删除指针?(作为旁注:稍后当游戏被优化时,对象将在启动时加载一次,因此在游戏过程中没有太多可删除) 最佳答

c++ - xcode - "attempt to use a deleted function"- 这是什么意思?

我正在Xcode4.2中编写C++库。我的一个类无法编译并出现此错误:attempttouseadeletedfunction没有具体说明它在谈论什么功能。我不想在这里发布类代码,但是有人知道这个错误是什么意思吗? 最佳答案 我对线程(C++11)有类似的消息。结果是我向线程调用的函数传递了错误数量的参数,因此线程找不到任何合适的函数并给出了该消息。 关于c++-xcode-"attempttouseadeletedfunction"-这是什么意思?,我们在StackOverflow上找

c++ - getline 和 std::istream::operator>>() 有什么区别?

#include#includeusingnamespacestd;intmain(){stringusername;cout>username;}所以我很好奇这两个代码之间有什么区别,我听说这是同一件事,但如果是,那为什么要用两种方法呢?#include#includeusingnamespacestd;intmain(){stringusername;cout 最佳答案 区别在于std::getline—顾名思义—从给定的输入流(可能是std::cin)和operator>>中读取行读一个单词1。即std::getline读取直

c++ - 错误 C2582 : 'operator =' function is unavailable in 'B'

以下代码给出了main()中行“e=f”的编译错误(至少在使用MSVS2008时):errorC2582:'operator='functionisunavailablein'B'classA{public:A(){}staticconstdoublex;};constdoubleA::x=0.0;classB{public:B():x(0.0){}constdoublex;};intmain(intargc,char*argv[]){Ac,d;Be,f;c=d;e=f;return0;}应该为A和B这两个类生成默认赋值运算符!?in12.8.10:"Iftheclassdefinit