Alo*_*ave 1 c++ memory-leaks new-operator undefined-behavior
可能重复:
内存是否在C++中泄漏"未定义的行为"类问题?
从来没有调用delete或delete[]在C++程序中返回new或重新发送的地址new []是未定义的行为还是仅仅是内存泄漏?
欢迎参考标准(如果有的话).
这出现在这里的一条评论中,我对此感到有些困惑.
该标准是关于语义清晰new和delete.如果你不打电话delete,肯定没有未定义的行为; 这是,事实上,标准的做法单身,和我想象std::cout和std::cin使用new[],以获得他们的缓冲器(他们几乎肯定从来没有delete).为什么不调用delete未定义的行为?
什么是未定义的行为是调用错误的形式delete,调用free分配的内存new,或者通常尝试删除对象而不遵循其分配所需的协议.
第4段中的[basic.life](3.8对象生命周期)告诉:
程序可以通过重用对象占用的存储来结束任何对象的生命周期,或者通过使用非平凡的析构函数显式调用类类型的对象的析构函数来结束任何对象的生命周期.对于具有非平凡析构函数的类类型的对象,程序不需要在重用或释放对象占用的存储之前显式调用析构函数; 但是,如果没有对析构函数的显式调用,或者如果没有使用delete-expression(5.3.5)来释放存储,则不应该隐式调用析构函数,并且任何依赖于析构函数产生的副作用的程序有未完成的行为.