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