启动C++项目.我是否应该担心释放动态分配的内存?

Luc*_*eis 4 c++ garbage-collection memory-management

我非常精通C,并且在C中释放内存是必须的.

但是,我正在开始我的第一个C++项目,并且我已经听说过一些关于如何不需要释放内存的东西,使用共享指针和其他东西.

我应该在哪里读到这个?这是否适合替代正确的deleteC++功能?它是如何工作的?

编辑

我很困惑,有些人说我应该分配使用new并使用智能指针进行重新分配过程.

其他人说我不应该首先分配动态内存.

其他人说,如果我使用新的我也必须像C一样使用删除.

那么哪种方法被认为更标准,更经常使用?

Jam*_*lis 18

我应该在哪里读到这个?

Herb Sutter的Exceptional C++和Scott Meyers的更有效的C++都是优秀的书籍,详细介绍了这一主题.

网上也有很多讨论(谷歌或StackOverflow搜索"RAII"或"智能指针"无疑会产生很多好结果).

这是否适合替代正确的deleteC++功能?

绝对.不用担心清理资源的能力,特别是在抛出异常时,是使用RAII和智能指针的最有价值的方面之一.


小智 9

我在评论中的意思(对不起是简洁 - 我不得不跑到商店)是你应该使用的:

std::string s = "foobar";
Run Code Online (Sandbox Code Playgroud)

而不是:

std::string * s = new std::string( "foobar" );
...
delete s;
Run Code Online (Sandbox Code Playgroud)

和:

vector <Person> p;
p.push_back( Person( "fred" ) );
Run Code Online (Sandbox Code Playgroud)

而不是:

vector <Person *> p;
p.push_back( new Person( "fred" ) );
Run Code Online (Sandbox Code Playgroud)

您应始终使用为您管理内存的类.在C++中,使用new创建对象的主要原因是您在编译时不知道它的类型.如果这不是原因,那么在使用new和delete之前,甚至是智能指针之前要考虑很久.

  • @greyfade:只有在真正需要的时候. (4认同)

Chr*_*odd 5

如果你分配动态内存(使用new),你需要释放它(使用delete),就像在C中使用malloc/free一样.C++的强大之处在于它为你提供了许多不调用new的方法,在这种情况下你不需要调用删除.