草庐IT

auto-delete

全部标签

C++11: "auto"关键字是否完全检索 cv 限定符?我有矛盾的样本

我有如下程序:structA{inti;};intmain(){constinti=0;autoai=i;ai=2;//OKconstAbuf[2];for(auto&a:buf){a.i=1;//error!}std::cout第一个autoai=i;没有问题,好像auto没有检索c/v限定符,因为ai可以修改的但是for循环编译失败——错误:成员A::i在只读对象中的赋值我知道auto不会检索&功能,我的问题是:auto是否像我的情况一样检索c/v限定符?我的测试程序似乎给出了相互矛盾的提示。 最佳答案 你在这里复制ai,而不是

c++ - C++中auto_ptr的指针运算

我正在阅读C++STL中auto_ptr的实现。我看到像->和*这样的指针上通常需要的操作被重载了,因此它们保留了相同的含义。但是,指针运算是否适用于自动指针?假设我有一个自动指针数组,我希望能够执行类似array+1的操作,并希望获得数组第二个元素的地址。我如何获得它?我对这个要求没有任何实际应用,只是出于好奇。 最佳答案 auto_ptr只能指向单个元素,因为它使用delete(而不是delete[])来删除它的指针。所以这里没有用到指针运算。如果您需要一个对象数组,通常的建议是改用std::vector。

c++ - 警告 : function uses 'auto' type specifier without trailing return type

下面的代码给出了下面的警告。有人可以解释原因吗(请注意代码没有用,因为我用int替换了我的类型来制作一个完整的示例)。警告:“MaxEventSize()”函数使用“auto”类型说明符而没有尾随返回类型[默认启用]想法是获取特定结构的最大大小(类型位于int所在的位置)。templateconstexprTcexMax(Ta,Tb){return(a 最佳答案 auto返回类型“没有尾随返回类型”是C++14的一个特性,所以我想你正在编译C++11。您的代码适用于C++14,但对于C++11,如果您想使用auto作为返回类型,您需

c++ - 为什么我们甚至需要删除运算符? (我们不能只使用 delete[])

我今天正在阅读有关delete和delete[]运算符的内容,我可以看到要释放分配给myChar的内存,我应该调用delete并为myCharArray释放内存我应该使用delete[].但是我一直认为myChar是指向大小为1的数组的指针。那么为什么我们在这种情况下使用delete?为什么我们需要delete呢?如果myChar实际上是一个大小为1的数组,我们难道不能到处使用delete[]吗?char*myChar=newchar;char*myCharArray=newchar[5];deletemyChar;delete[]myCharArray;

【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

目录1->引用1.1->引用概念1.2->引用特性 1.3->常引用1.4->使用场景1.5->传值、传引用效率比较1.6->值和引用作为返回值类型的性能比较1.7->引用和指针的区别2->内联函数2.1->概念2.2->特性3->auto关键字(C++11)3.1->类型别名思考3.2->auto简介3.3->auto的使用细则3.4->auto不能推导的场景4->基于范围的for循环(C++11)4.1->范围for的语法4.2->范围for的使用条件5->指针空值nullptr(C++11)5.1->C++98中的指针空值1->引用1.1->引用概念引用不是新定义一个变量,而是给已经存在

c++ - 错误 : ‘i’ does not name a type with auto

这个问题在这里已经有了答案:HowdoIenableC++11ingcc?(4个答案)关闭7年前。我是C++新手,这是我的程序#include#include#include#include#includeintmain(){staticconstdoublearr[]={16.0,2.2,77.5,29.0,24.0};std::vectorvec(arr,arr+sizeof(arr)/sizeof(arr[0]));std::transform(vec.begin(),vec.end(),vec.begin(),bind2nd(std::minus(),3.0));for(aut

c++ - delete[] 是否适用于通用数组?如果是这样,为什么在其上使用 std::vector::erase 会导致释放内存时出错

我曾尝试使用圆形数组,因此最终编写了一个CircularArray类,并附上了代码。它使用数组的通用指针。当我尝试使用std::vector创建此类圆形数组的列表时,我在尝试对其使用删除时遇到了问题。我不明白为什么会这样,因为我认为析构函数和复制构造函数正常工作得很好。有人可以帮忙吗?代码:CircularArray类templateclassCircularArray{//Classdenotedby'T'isexpectedtohaveafunctionalassignmentoperator,i.e.operator=(constT&ext){}inplaceprotected:

c++ - 将 auto_ptr 传递给函数可以有效地使其成为接收器。为什么?

我正在阅读一些关于共享指针的笔记。他们说STL对auto_ptr的第一次尝试有以下主要缺点:不能在STL容器中使用复制auto_ptr转移所有权将auto_ptr传递给函数有效地使其成为接收器我理解前两个,但不确定最后一个是什么意思。谁能解释一下。谢谢。 最佳答案 这是因为一旦将auto_ptr复制到一个变量中,您就失去了指向新变量的指针的所有权。当你有:voidfoo(std::auto_ptrx);并且您使用auto_ptr调用foo,您为foo复制了一份auto_ptr采用。这有效地将所有权转移到foo,因此指针在foo完成后

c++ - 可以在分配有新位置的指针上调用 delete 吗?

我们可以在分配给placementnew的指针上调用delete吗?如果没有那么为什么?请详细说明。我知道没有展示位置删除。但是我想知道为什么只删除opetator不能删除内存而不关心指针指向的内存是如何分配的?delete做两件事:调用析构函数释放内存而且我认为delete没有理由不能对通过placementnew创建的对象调用这两个操作中的任何一个。知道原因吗? 最佳答案 您只能对使用operatornew创建的指针调用delete。如果您将放置new与由普通operatornew分配的内存位置一起使用,那么您可以安全地对其使用

c++ - 当我们有 new/delete 时,为什么要使用 malloc/free?

当我们在C++中有new和delete时,malloc和free有什么用。我想free和delete的功能是一样的。 最佳答案 它们不一样。new调用构造函数,malloc只是分配内存。此外,它是未定义的行为将两者混合(即使用new与free和malloc与删除).在C++中,你应该使用new和delete,malloc和free是为了与C的兼容性原因。 关于c++-当我们有new/delete时,为什么要使用malloc/free?,我们在StackOverflow上找到一个类似的问题