如果我声明一个临时自动删除的字符缓冲区使用
std::auto_ptr<char> buffer(new char[n]);
然后当缓冲区超出范围时,缓冲区会被自动删除。我会假设缓冲区是使用 delete 删除的。
但是缓冲区是使用 new[] 创建的,所以严格来说应该使用 delete[] 删除缓冲区。
这种不匹配可能导致内存泄漏的可能性有多大?
最佳答案
对用 new[] 分配的指针调用 delete 的行为是 undefined .如您所料, auto_ptr does call delete当智能指针超出范围时。您需要担心的不仅仅是内存泄漏——崩溃和其他奇怪的行为也是可能的。
如果不需要转移指针的所有权,Boost的scoped_array类可能是您正在寻找的。p>
关于c++ - 将 auto_ptr 与 new char[n] 一起使用是否错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261336/