在我的互联网浏览器中,我遇到了这个帖子,其中包括这个
"(写得很好)C++不遗余力地使堆栈自动对象"就像"原语一样工作,正如Stroustrup建议的那样"按照内容做".这需要更加坚持面向对象开发的原则:你的类是不正确的,直到它"像"一个int,遵循"三个规则",它保证它可以(就像一个int)被创建,复制和正确销毁为自动堆栈."
我已经做了一点C和C++代码,但只是顺便说一句,从来没有任何严肃的事情,但我只是好奇,这究竟意味着什么?
有人能举个例子吗?
堆栈对象由编译器自动处理.
范围保留后,将被删除.
{ obj a; } // a is destroyed here
使用"newed"对象执行相同操作时会出现内存泄漏:
{ obj* b = new obj; }
b没有被破坏,所以我们失去了回收内存b的能力.也许更糟糕的是,物体无法自我清理.
在C中,以下是常见的:
{ FILE* pF = fopen( ... ); // ... do sth with pF fclose( pF ); }
在C++中我们写这个:
{ std::fstream f( ... ); // do sth with f } // here f gets auto magically destroyed and the destructor frees the file
当我们忘记在C示例中调用fclose时,文件未关闭,其他程序可能无法使用.(例如,它不能删除).
另一个例子,展示了对象字符串,它可以被构造,分配给它,并在退出范围时被销毁.
{ string v( "bob" ); string k; v = k // v now contains "bob" } // v + k are destroyed here, and any memory used by v + k is freed