我的大多数C ++编程经验都是针对学校的项目。通过这种方式,我们禁止或不鼓励使用外部库(即增强)。因此,除非我们想编写自己的智能指针,否则我们无法使用智能指针,这通常超出了项目的范围。我只想知道现实世界的项目,实际上手动完成了多少内存管理?
我想这是一个模糊的问题。我只是想知道在现实世界的项目中通常如何进行内存管理。
答案 0 :(得分:6)
在遗留代码上通常会有很多手动内存管理。如果有人没有花时间重构它,你可以找到很多裸体新闻和删除,只是乐意等待泄漏到某个地方。
我相信最新的,写得很好的C ++软件通常会使用智能指针,RAII等。手动内存管理容易出错。
答案 1 :(得分:3)
在少数项目中我不被允许提升,在其中一个项目中,我确实推出了一个基本的智能指针。
那就是说,在现实世界中,使用提升。使用第三方库。如果车轮在那里,请不要重新发明。你会更有效率,而且你可以花更少的时间来编写别人已经写过的代码。
答案 2 :(得分:2)
取决于“内存管理”的含义。
显然,严格的定义意味着“所有的时间”,因为自动变量(堆栈分配)是一个记忆的东西。你可能不打算这样做。
另一方面,有原始new
和delete
用法。这个应该永远不会发生,但无论如何都可能发生在“常见的”C ++中。这是不好的做法,草率,容易用容器解决。人们可以从某个地方复制并粘贴一个智能指针实现,并且没有任何借口。
在中间,理想情况下,所有“管理”都是使用容器自动完成的。可能需要完成的唯一管理是打破循环依赖关系或创建自己的容器类。
在我自己的项目中,我在制作实用工具课时只使用new
和delete
,因此我再也不必new
和delete
了。之后,我直接进入某个容器时才使用new
。
答案 3 :(得分:0)
在现实世界中,两者兼而有之。您很可能会看到更多不使用智能指针的项目代码。使用new和delete是最普遍的。
话虽这么说,现在越来越多的程序员在他们的项目中使用boost和智能指针,我看到一些代码被重构为使用boost :: shared_ptr
答案 4 :(得分:0)
值得一提的是,shared_ptr在2003年作为std :: tr1 :: shared_ptr进入标准库。或者至少,如果它不是正式的库,它与我最近使用的所有C ++编译器一起提供。