当前位置:  开发笔记 > 编程语言 > 正文

C++ - "Stack automatic"是什么意思?

如何解决《C++-"Stackautomatic"是什么意思?》经验,为你挑选了1个好方法。

在我的互联网浏览器中,我遇到了这个帖子,其中包括这个

"(写得很好)C++不遗余力地使堆栈自动对象"就像"原语一样工作,正如Stroustrup建议的那样"按照内容做".这需要更加坚持面向对象开发的原则:你的类是不正确的,直到它"像"一个int,遵循"三个规则",它保证它可以(就像一个int)被创建,复制和正确销毁为自动堆栈."

我已经做了一点C和C++代码,但只是顺便说一句,从来没有任何严肃的事情,但我只是好奇,这究竟意味着什么?

有人能举个例子吗?



1> Christopher..:

堆栈对象由编译器自动处理.

范围保留后,将被删除.

{
   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

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有