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之前,甚至是智能指针之前要考虑很久.
如果你分配动态内存(使用new),你需要释放它(使用delete),就像在C中使用malloc/free一样.C++的强大之处在于它为你提供了许多不调用new的方法,在这种情况下你不需要调用删除.