草庐IT

延时分配

全部标签

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

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

c++ - 在分配期间调用不需要的对象的析构函数

myClassVar=MyClass(3);我希望在左侧先前创建的myClassVar上调用析构函数。但它实际上是在MyClass(3)创建的新对象上调用的。我的完整测试代码和输出如下..编辑我该如何解决这个问题?实现赋值运算符?MyClass其实是有指针的,还有MYSQL_STMT*,我想知道我应该如何处理MYSQL_STMT*变量。我只需要MyClassVar(3)对象而不是在创建ClientClass对象时首先创建的MyClassVar()。我经常遇到这种情况,想知道是否有好的方法。#includeclassMyClass{public:MyClass(){printf("MyC

c++ - 是否可以在分配期间在 C++ 中给出一个类的定义,这在 Java 中是允许的

或者简单地说我可以做一些事情吗classA{public:virtualvoidfoo()=0;};classB{public:A*a;b(){a=newA(){voidfoo(){printf("hello");}}}; 最佳答案 不,C++没有像Java那样的匿名类。你可以像这样定义本地类:classB{public:A*a;b(){structmy_little_class:publicA{voidfoo(){printf("hello");}};a=newmy_little_class();}};或者可能只是一个嵌套类:cl

C++,为什么在修改新分配的对象后会出现访问冲突?

好吧,我目前正在开发一款游戏,今天重构了一些代码后遇到了内存问题。它使用基于组件的设计,我正在修改组件分配和传递给实体的方式。最初一些组件被分配为实体内的成员变量,但现在我想将它们分配到别处并通过指针传递给实体。您可以在下面看到我是如何使用我项目中的示例代码实现这一点的。我基本上遍历所有实体并为它们分配组件。问题是我在第6次迭代“启动”“instanceObject”的第一行遇到了访问冲突,但不知道为什么。使用调试器,看起来没有任何变量指向无效地址。这是我创建实体和组件的方法。for(unsignedinti=0;inumberGenerator.GetInt(50,5);_posit

c++ - 奇怪的异常抛出 - 分配 : Operation not permitted

我想从cin进行异步读取,因此我有一段代码客户端.h...boost::asio::posix::stream_descriptorinput;boost::asio::streambufinput_buffer客户端.cppClient::Client(intargc,char**argv,boost::asio::io_service&io_service):tcp_socket(io_service),udp_socket(io_service),input(io_service,::dup(STDIN_FILENO)){...read_std_input();}voidClie

c++ - 如何将二维数组相互分配?

组件我有一个字符串,例如字符block[4][256]="";我有一句话charsentence[256]="Bobwalkedhisdog";我还有一个迭代器变量intpos=0;我正在努力实现的目标我正在尝试将数组sentence中的每个单词按顺序分配到二维block数组block中。例如,假设我有这段代码(我自己写的-没有按我的计划工作)for(intx=0;x我怎么看我通过处理这个问题来看待它的方式是,我需要先扫描句子,直到遇到一个空格''字符,一个空白。遇到这种情况后,我必须重新扫描句子并开始将所有字符添加到该空格''的位置到我的block数组block[y][z]的第一段中

c++ - 如何避免 std::vector 在(重新)分配时复制?

我刚刚在向其添加新元素时遇到了std::vector的问题。似乎当你试图向它添加更多元素时,它需要分配更多空间,它通过复制它当前拥有的最后一个元素所有元素来实现。这似乎假设vector中的任何元素都是完全有效的,因此复制总是成功的。在我们的例子中,这不一定是真的。目前我们可能在vector中有一些遗留元素,因为我们选择不删除它们,它们是有效的对象,但它们的数据不能保证有效的行为。对象有守卫,但我从未考虑过向复制构造函数添加守卫,因为我认为我们永远不会复制无效对象(vector强制):CopiedClass::CopiedClass(constCopiedClass&other):mem

c++ - vector 相关的内存分配问题

我遇到了以下错误。我有一个类Foo。此类的实例存储在classB的std::vectorvec中。在Foo类中,我通过使用new分配内存并在~Foo()中删除该对象来创建A类的实例。代码可以编译,但我在运行时遇到了崩溃。如果我从Foo类的析构函数中禁用deletemy_a。代码运行良好(但会出现内存泄漏)。有人可以解释这里出了什么问题并提出修复建议吗?谢谢!classA{public:A(intval);~A(){};intval_a;};A::A(intval){val_a=val;};classFoo{public:Foo();~Foo();voidcreateA();A*my_a

涉及 vector 的C++内存分配问题

vectorvect;int*int_ptr=newint(10);vect.push_back(*int_ptr);我知道每个"new"都需要在某个时候跟一个“删除”,但是clear()方法是否会清除此内存?这种做同样事情的方法怎么样:vectorvect;intint_var=10;vect.push_back(int_var);据我所知,clear()调用变量析构函数,但此示例中的两个vect.push_back()方法都将一个对象推送到vector上,而不是指针。那么使用int指针的第一个示例是否需要clear()以外的东西来清理内存? 最佳答案

c++ - 为什么不能用 C++ 中的一个新调用来分配多维数组?

在C++中,您可以像这样轻松分配一维数组:T*array=newT[N];你也可以用一条语句删除它:delete[]array;编译器会知道如何释放正确数量的字节。但是为什么不能像这样分配二维数组呢?T*array=newT[N,M];还是这样?T*array=newT[N,M,L];如果你想要一个多维的你必须这样做:T**array=newT*[N];for(inti=0;i如果您想要一个使用矩阵(矩阵运算、特征值算法等)的快速程序,您可能也想利用缓存以获得最佳性能,这需要数据位于同一位置。使用vector>是一样的情况。在C中,您可以在堆栈上使用可变长度数组,但不能在堆上分配它们(