草庐IT

new_order

全部标签

c++ - 在 C++ 中通过 "new"重新分配内存

关于C++内存管理的小问题如果我做如下操作:pointer=newchar[strlen(someinput_input)+1];然后再次执行,strlen(someinput_input)可能会返回不同的结果。这是否会导致从先前的“new”语句分配的内存被保留?例如,每个new语句是从操作系统接收另一blockHEAP内存,还是只是重新分配?假设我做了一个最终的deletepointer[];,这会释放我通过new分配给那个指针的所有内存吗? 最佳答案 每次调用new必须与对delete的相应调用相匹配.顺便说一句,您可能应该考虑

c++ - c++中new的返回类型是什么?

在C中,malloc()返回void*。但是在C++中,new返回什么?doubled=newint; 最佳答案 您必须区分两件事。一个是新表达式。它是表达式newT,其结果是T*。它做了两件事:首先,它调用new运算符来分配内存,然后它调用T的构造函数。(如果构造函数中止除了异常(exception),它还会调用删除运算符。)不过,前面提到的新运算符有多种形式。最突出的是这个:void*operatornew(std::size_t);您可以明确地调用它,但很少有人这样做。还有其他形式的new运算符,例如数组void*operat

【已解决】redis启动错误: Warning: no config file specified, using the default config. In order to specify a

Warning:noconfigfilespecified,usingthedefaultconfig.Inordertospecifyaconfigredis启动报如下错误:意思是:启动时无法找到配置文件,远程无法连接解决方法:第一种:在cmd命令行中执行redis-server.exeredis.windows.conf第二种:在redis的根目录下新建一个start.bat文件,将redis-server.exeredis.windows.conf放在文件里,双击start.bat即可启动。也可以解决上述问题下面说说一个小问题:如何更改密码?首先如果是想一劳永逸,那么在redis.win

C++ new 和 delete 重载

new和delete运算符重载在使用不同的编译器和不同的c++标准进行编译时可能会或可能不会工作。这是正常行为吗?我使用以下代码来测试编译器。#includevoid*operatornew(size_tsize){std::cout以下是我测试代码时从几个编译器得到的结果。mingw-w64官方构建-x86_64-7.1.0-release-posix-seh-rt_v5-rev0.7zc++1112c++141clangx86_64-v4.0.0使用上面的编译器手动构建,没有补丁c++11andc++1412msvc-平台工具集v141和sdkv10.0.15063.0/std:c

c++ - "#define new DEBUG_NEW"和 "#undef THIS_FILE"等真的有必要吗?

当您创建新的MFC应用程序时,向导会在几乎每个CPP文件中创建以下代码块:#ifdef_DEBUG#definenewDEBUG_NEW#endif有时它还会添加:#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;如果这段代码是多余的,我想从我的CPP文件中删除它。我在VS2008上使用带有C++/CLI的MFC应用程序。从CPP中删除这段代码后,我尝试在Debug中运行,它似乎工作正常。"new"变量工作正常,没有泄漏,ASSERT对话框显示正确的文件名并跳转到有问题的行。谁能告诉我它的作用以及删除它是否安全? 最

c++ - new/delete 和::new/::delete 有什么区别?

newdelete或::new::delete我想知道::的用途,因为如果我删除它们,它似乎可以正常工作。以上就是autopointer教程中写的全部代码。#includesize_t*alloc_counter(){return::newsize_t;}voiddealloc_counter(size_t*ptr){::deleteptr;} 最佳答案 您可以为类覆盖new,但::new将始终在全局范围内查找。即:classA{void*operatornew(std::size_tsz){/*1*/}};void*operato

c++ - 如果我不使用 new 关键字,我会发生内存泄漏吗?

我是这门语言的新手,我对内存泄漏有一个基本的怀疑。不使用new关键字会不会泄露?(即在堆栈中使用我的变量并使用像std::vector这样的数据容器)我应该担心这个问题吗?如果是这样的话,有人能给我一个没有动态分配内存而造成泄漏的情况的例子吗? 最佳答案 i.ehavingmyvariablesinthestackandusingdatacontainerslikestd::vector不,使用std::vector或其他标准容器您不必担心。cansomeonegivemeanexampleofasituationthatcreat

C++:struct 和 new 关键字

我是C++的初学者,我有以下代码:structAirline{stringName;intdiameter;intweight;};Airline*myPlane=newAirline;我的问题是,如果我没记错的话,当我调用new方法时,它会分配内存。PC如何知道要分配多少内存,特别是考虑到其中有一个字符串类型?谢谢 最佳答案 std::string对象是固定大小的;它包含一个指向实际字符缓冲区的指针及其长度。std::string的定义看起来像classstring{char*buffer;size_tnchars;public:

c++ - "(void) new"在 C++ 中是什么意思?

我一直在看Qttutorial它使用了我以前从未见过的结构:(void)newQShortcut(Qt::Key_Enter,this,SLOT(fire()));(void)newQShortcut(Qt::Key_Return,this,SLOT(fire()));(void)newQShortcut(Qt::CTRL+Qt::Key_Q,this,SLOT(close()));我已经在没有(void)的情况下尝试了这个,它仍然可以编译和工作,那么(void)的目的是什么? 最佳答案 将表达式转换为(void)基本上告诉编译器忽

c++ - 此 C++ 代码是否会导致内存泄漏(强制转换数组 new)

我一直在研究一些使用可变长度结构(TAPI)的遗留C++代码,其中结构大小将取决于可变长度字符串。这些结构是通过转换数组new分配的,因此:STRUCT*pStruct=(STRUCT*)newBYTE[sizeof(STRUCT)+nPaddingSize];不过稍后使用delete调用释放内存:deletepStruct;数组new[]和非数组delete的混合会导致内存泄漏还是取决于编译器?将此代码更改为使用malloc和free会更好吗? 最佳答案 从技术上讲,我认为它可能会导致分配器不匹配的问题,但实际上我不知道有哪个编译