首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何确保在编写C++代码本身时不会导致任何内存泄漏?

如何确保在编写C++代码本身时不会导致任何内存泄漏?
EN

Stack Overflow用户
提问于 2009-08-20 12:04:56
回答 13查看 542关注 0票数 6

运行valgrind或purify将是下一步,但是在编写代码本身的同时,您如何确保它不会导致任何内存泄漏呢?您可以确保以下几点:- 1:新建的数量等于删除2:打开的文件描述符是否关闭

还有别的事吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-08-20 12:07:47

尽可能地使用RAII成语

在适当的地方使用智能指针,例如std::auto_ptr。(不要在任何标准集合中使用auto_prt,因为它不会像您想象的那样工作)

票数 25
EN

Stack Overflow用户

发布于 2009-08-20 12:12:25

尽可能避免动态创建对象。来自Java和其他类似语言的程序员通常编写如下内容:

代码语言:javascript
代码运行次数:0
运行
复制
string * s = new string( "hello world" );

当他们应该写下:

代码语言:javascript
代码运行次数:0
运行
复制
string s = "hello world";

类似地,当它们应该创建值集合时,它们会创建指针集合。例如,如果您有一个如下所示的类:

代码语言:javascript
代码运行次数:0
运行
复制
class Person {
   public:
      Person( const string & name ) : mName( name ) {}
      ...
   private:
      string mName;
};

而不是像这样编写代码:

代码语言:javascript
代码运行次数:0
运行
复制
vector <Person *> vp;

或者甚至是:

代码语言:javascript
代码运行次数:0
运行
复制
vector <shared_ptr <Person> > vp;

取而代之的是:

代码语言:javascript
代码运行次数:0
运行
复制
vector <Person> vp;

您可以很容易地添加到这样的向量中:

代码语言:javascript
代码运行次数:0
运行
复制
vp.push_back( Person( "neil butterworth" ) );

并且为您管理Person和vector的所有内存。当然,如果你需要一个多态类型的集合,你应该使用(智能)指针

票数 14
EN

Stack Overflow用户

发布于 2009-08-20 12:08:17

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1305713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档