草庐IT

delete-operator

全部标签

c++ - operator new 负数

在C++11中,如果我们尝试使用全局运算符new分配负大小的数组,它会抛出std::bad_array_new_length,但是C++98/C++03呢?是UB还是会抛出std::bad_alloc?intmain(){int*ptr=newint[-1];} 最佳答案 如果大小为C++03标准的负数5.3.4p6,则程序不正确:Everyconstant-expressioninadirect-new-declaratorshallbeanintegralconstantexpression(5.19)andevaluateto

c++ - 在工作中遇到这个 "operator ClassName *"。这是什么意思?

有这段代码的类是ClassName指针的引用类,即:classClassName;classClassRef{ClassName*m_class;...operatorClassName*()const{returnm_class;}...我假设这用于指针有效性检查,例如:ClassRefref(newClassName())if(ref){blablabla}我的想法正确吗? 最佳答案 这是转换运算符的重载。每当需要将ClassRef对象转换为ClassName指针类型时,都会调用此运算符。所以;ClassRefr;ClassNa

delete Action的Laravel 5.4中的MethodNowallowhallowedhttpexception

我正在研究Laravel5.4应用程序,其中我希望使用户能够删除他们上传的某些图像。图像有一个小的x在右上角,使模态弹出。我添加了模态形式的部分代码。当我想提交销毁选项时,我会收到错误:(1/1)rutecollection.php中的methodnotallowedhttpexception(第251行)有人可以帮我解释我做错了什么。我尝试将表格中的方法更改为DELETE并将路由文件更改为get,post,any等等模态弹出窗口:original_file}}"data-value="{{$progressPicture->id}}">×模态形式:AnnulerenVerwijd

c++ - operator const Base&() 是否应该用于不可访问的基类?

我希望有一个类允许访问其基本情况的const接口(interface),但不允许访问其他类。特别是:classB{};classA:privateclassB{public:operatorconstB&(){return*this;}};intmain(){Aa;constB&b=a;//Shouldthislinebeanerror?}g++给出了一个不可访问的基类错误。你们那里的语言专家认为这个错误在C++11/C++14中是正确的吗?是的,我意识到我可以(并且将会)这样做:intmain(){Aa;constB&b=a.operatorconstB&();}对这个构造的另一种方

c++ - std::vector 保留后 operator[] 上 msvc 和 gcc 之间的行为差​​异,哪个是对的?

Thissnippetofcode使用msvc(越界错误)惨遭失败,但似乎在gcc和clang上都能正常工作。什么是正确的行为?#include#includeintmain(){std::vectorv;v.reserve(10);for(inti=0;i 最佳答案 行为未定义。reserve只保留内存,不影响容器的大小。也许您想使用resize?std::vectorv;v.resize(10);for(inti=0;i虽然在这种情况下你可以写std::vectorv(10);for(inti=0;i或者,您可以将reserve

c++ - 仅在与类的其他对象进行比较时,是否有任何理由不将 operator== 作为成员重载?

我一直在互联网上寻找答案,但我找不到任何答案。给出的唯一原因似乎与比较不同类型的对象有关(例如MyClass==int)。但最常见的用例是将一个类实例与同一类的另一个实例进行比较,而不是与任何不相关的类型进行比较。换句话说,我确实理解以下方面的问题:structA{booloperator==(intb);};但是我找不到任何好的理由在最明显的用例中不使用成员函数:structA{booloperator==(constA&);};最规范的重复Whatarethebasicrulesandidiomsforoperatoroverloading?作为经验法则说“将二元运算符重载为非成员

c++ - operator new 如何调用类的构造函数?

我知道,new操作符会调用类的构造函数。但是它是如何发生的,用于此的底层技术是什么。 最佳答案 这是我想象的样子:T*the_new_operator(args){void*memory=operatornew(sizeof(T));T*object;try{object=new(memory)T(args);//(*)}catch(...){operatordelete(memory);throw;}returnobject;}(*)从技术上讲,它并不是真正调用placement-new,但只要你不重载它,心智模型就可以正常工作:

c++ - 如果我在使用新程序和结束程序分配数据后没有调用 delete 运算符,会发生什么情况?

如果我在使用new分配数据后没有调用delete操作符会发生什么。我知道已分配的数据在释放之前不可用,但在程序结束后?为什么PC看起来很恶心xD,我的意思是它很慢但是过了一段时间它的性能变得更好但不像程序执行之前那样?注意:我运行的是WindowsXP。 最佳答案 当程序结束时,它请求的所有内存(堆栈、堆等)都被操作系统要求。 关于c++-如果我在使用新程序和结束程序分配数据后没有调用delete运算符,会发生什么情况?,我们在StackOverflow上找到一个类似的问题:

c++ - delete my_object 时到底发生了什么;被执行? sizeof(MyClass) 是否将所有其他内存向左移动?

为了这个问题,我将把内存想象成一个简单的字节数组,我将讨论堆内存,因为它可以动态分配。假设我正在实例化某个类,并在已经分配了一些内存的堆上创建一个对象。然后,在创建对象之后,我分配了更多的内存(可能通过实例化另一个类)。当然,这意味着使用new和delete关键字。内存现在看起来是这样的:...bytebytemy_object...my_objectbytebyte...执行deletemy_object;时到底发生了什么?sizeof(MyClass)是否将所有其他内存向左移动?如果有,由谁负责?操作系统?那么当没有操作系统提供虚拟内存时会发生什么? 最

c++ - 如何理解函数ostream& operator<< (ostream& os, const unsigned char* s)

对于像这样的函数声明ostream&operator我想知道返回了什么。CPP引用说它返回ostream对象。但为什么它是ostream&而不是简单的ostream?谢谢 最佳答案 运算符返回ostream&(即对ostream对象的可修改引用)而不是拷贝或void的原因是它允许链接,因为实例,以std::cout作为ostream对象的常见示例:unsignedinti=2;std::cout这里我们链接了两个constchar*,一个unsignedint和一个流修饰符,而不必用单独的行将它们分开,这使得阅读和明白了。