内存泄漏为什么没有想象中的大?????
#include <stdio.h>
#include <memory>
#include <string>
class _row
{
private:
int m_i;
std::string m_s;
_row():m_i(0),m_s("")
{
//
}
};
//按道理,auto_ptr 不支持数组样式的内存释放,但是发现内存并没有泄漏
//再看函数normal_test,是因为 delete [] 换成 delete 没有泄漏,
//难道颠覆了 C++ 标准,还是编译器做了优化
void auto_test()
{
for(int i = 0;i<80000000;++i)
{
std::string address = "BBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
char *pp = new char[address.size() + 1];
std::auto_ptr<char> auto_pt(pp);
char * p = auto_pt.get();
}
}
//按道理,运行这段代码要泄漏很多内存的,但是发现
//循环完成的时候,内存基本没有泄漏
void normal_test()
{
for(int i = 0;i<80000000;++i)
{
std::string address = "BBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
char *pp = new char[address.size() + 1];
//std::auto_ptr<char> auto_pt(pp);
//char * p = auto_pt.get();
delete pp;
}
}
int main(int argc,char *argv[])
{
auto_test();
//normal_test();
printf("%s\n","finish");
pause();
}
//1 上诉测试在 vc++ 2010,gcc 3.3,gcc4.1 上测试结果一样。
//2. 如果 char 换成构造一个用户自定义的类,则发现内存泄漏非常明细;
//比如: _row *pp = new _row[5];delete pp;实际上这样执行到delete 则
//报错了,为什么会报错呢