草庐IT

delete_all

全部标签

c++ - delete[] 运算符是否处理通过指针返回的动态分配的内存?

我想知道delete[]运算符如何处理函数返回的指针,而不是在与delete语句相同的范围内进行动态分配。假设我有一个像这样的简单函数:int*getArray(){int*returnVal=newint[3];returnVal[0]=returnVal[1]=returnVal[2]=0;returnreturnVal;}现在,当我需要在代码中使用该数组时,我会执行以下操作:int*vals=getArray();//usevalues...delete[]vals;但是,我想知道,C++编译器如何知道分配的内存块有多大(以及要从vals中删除多少内存元素)?这是一种有效的技术,

c++ - "All memory allocated on the stack is known at compile time"是什么意思?

阅读thisgreattutorial关于堆栈与堆,我对这句话有疑问:在堆栈上分配的所有内存在编译时都是已知的。我的意思是,如果我处于取决于用户输入的for循环中(i从0到X),并且在for我在堆栈上分配内存(例如创建一些类的新实例并放入类容器中),它不知道编译程序时堆栈将如何增长(它错过了用户的输入)。我是不是误会了什么? 最佳答案 对读者来说,所做的陈述稍微简化了一点。你是对的,堆栈本质上是动态的,实际分配的数量可能因动态输入而异。这是一个带有递归函数的简单示例:voidf(intn){intx=n*10;if(x==0)ret

c++ - Make 始终针对目标 "all"运行,即使没有任何更新

我有这些文件测试.cpp点.h点.cpp三角形.h三角形.cpp我想要一个makefile,它允许我通过发出makePoint或分别构建每个类Point和Trianglecode>makeTriangle在需要时(头文件或源文件已更改)。makeall应该编译所有内容并在需要时构建输出程序Test。这是我到目前为止的想法:CXX=g++CXXFLAGS=-std=c++11-Wall-pedanticOBJS=Test.oPoint.oTriangle.oall:$(OBJS)$(CXX)$(CXXFLAGS)$(OBJS)-oTestPoint.o:Point.cppPoint.h$

c++ - 为什么这个无锁堆栈类中的 'deleting' 节点会导致竞争条件?

在AnthonyWilliams的《C++ConcurrencyinAction》一书中,第7.2.1节列出了一个无锁堆栈实现:templateclasslock_free_stack{structnode{shared_ptrdata_;node*next_;node(constT&data):data_(make_shared(data)){}};atomichead_;public:voidpush(constT&data){node*new_node=newnode(data);new_node->next_=head_.load();while(!head.compare_e

c++ - 循环依赖 : can't delete an incomplete type

我不明白为什么会出现此编译器错误:errorC2027:useofundefinedtype'GameState'note:seedeclarationof'GameState'errorC2338:can'tdeleteanincompletetypewarningC4150:deletionofpointertoincompletetype'GameState';nodestructorcalled这是相关代码:#pragmaonce#include#include"SpawnManager.h"#include"Resource.h"#include#includeclassGa

c++ - 是否需要将 delete 用于在 vector 中创建的新数组?

我正在尝试为void**数据数组创建一些动态数组。std::vectordata;data.push_back(newdouble[1024]);//arrayofdoublesdata.push_back(newshort[1024]);//arrayofshorts为了清理我应该只使用data.clear();或者是否需要删除每个新的(s),如果需要,如何完成? 最佳答案 ForcleanupshouldIjustusedata.clear();这将从vector中删除所有指针。如果其中任何一个是指向它们各自动态对象的唯一拷贝,

c++ - 如果我有运算符 T *(),是否需要重载 delete?

如果我有一个包含指针的模板类A,并且A有一个将返回该指针的隐式转换运算符,我是否需要,或者我应该,为A定义一个delete运算符,如果我打算将delete应用于此类的对象? 最佳答案 如果定义operatornew,则只需定义operatordelete——在这种情况下,您几乎必须这样做。这并不意味着某些东西不需要删除您的A*——但您不需要为此定义任何运算符,它会默认工作。 关于c++-如果我有运算符T*(),是否需要重载delete?,我们在StackOverflow上找到一个类似的问

c++ - 传递 std::ofstream 作为参数时,为什么我要生成 "use of deleted"函数?

这个问题在这里已经有了答案:Whycopyingstringstreamisnotallowed?(3个答案)C++copyastreamobject(5个答案)关闭7年前。我有一个成员是std::ofstreamfBinaryFile和一个voidsetFile(std::ofstream&pBinaryFile){fBinaryFile=pBinaryFile;}输出:Data.h:86:16:error:useofdeletedfunction‘std::basic_ofstream&std::basic_ofstream::operator=(conststd::basic_o

一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill

开始一文搞懂Promise新ApiallSettled的用法和all区别,以及如何在不支持新特性的环境下实现一个PolyfillallSettled的用法construnAllSettled=async()=>{constsuccessPromise=Promise.resolve('success')//一个正常返回的PromiseconstfailPromise=Promise.reject('fail')//一个异常返回的Promise//使用allSettledconstsettiled=awaitPromise.allSettled([successPromise,failPromi

c++ - 在 C++ 中重载 new、delete

我遇到这一行是stroustrup运算符函数必须是成员或至少采用一个用户定义类型的参数(重新定义new和delete运算符的函数不需要)。operatornew和operatordelete不是将用户定义的类型作为它们的参数之一吗?这是什么意思,我在这里遗漏了什么吗 最佳答案 Stroustrup的引述显然适用于运算符重载。C++语言仅支持用户定义类型的运算符重载。这意味着重载函数(operator)必须是用户定义类型的成员,或者是具有至少一个用户定义类型参数的独立函数。这正是相关引述的意思。但独立(非成员(member))oper