C++ 是否缺少删除未定义的行为?
当我分配内存而不调用delete时,这是一种未定义的行为吗 例如:C++ 是否缺少删除未定义的行为?,c++,memory-management,language-lawyer,C++,Memory Management,Language Lawyer,当我分配内存而不调用delete时,这是一种未定义的行为吗 例如: int main(int argc, char** argv) { int* a = new int[1]; // next code only to prevent optimization (hopefully) *a = argc; std::cout << *a << std::endl; // no delete return 0; } 让我们假设新的行
int main(int argc, char** argv) {
int* a = new int[1];
// next code only to prevent optimization (hopefully)
*a = argc; std::cout << *a << std::endl;
// no delete
return 0;
}
让我们假设新的行为没有被优化。它不是未定义的行为;这是内存泄漏
当然,只有在流程仍在运行时,泄漏才会存在;在这种情况下,进程退出,泄漏的概念随后立即变得毫无意义。否,这是定义的行为:内存泄漏。既然你的程序马上退出,操作系统仍然会回收所有内存。你说的优化是什么意思?@juanchopanza:谢谢你的链接,没有发现是搜索…我认为这是未定义的行为,由于该程序依赖于调用析构函数的副作用,即如果不调用该程序,该程序可能会耗尽内存。但这并不十分清楚。谁否决了这一点,为什么?我想知道一句话是不是错了?upvoted@juanchopanza对不起,什么?程序显然不依赖任何副作用,没有析构函数,因为int[]不是类类型,而且内存不足也不是未定义的行为。对不起,我脑子里仍然有一个数组,数组是std::string的一个。