运行valgrind或purify将是接下来的步骤但是在编写代码本身时,您如何确保它不会导致任何内存泄漏?您可以确保以下事项: - 1:新数量等于删除2:打开文件描述符是否关闭
还有别的事吗?
小智 14
尽量避免动态创建对象.来自Java和其他类似语言的程序员经常写下这样的东西:
string * s = new string( "hello world" );
Run Code Online (Sandbox Code Playgroud)
什么时候他们应该写:
string s = "hello world";
Run Code Online (Sandbox Code Playgroud)
类似地,当它们应该创建值集合时,它们会创建指针集合.例如,如果您有这样的类:
class Person {
public:
Person( const string & name ) : mName( name ) {}
...
private:
string mName;
};
Run Code Online (Sandbox Code Playgroud)
而不是编写如下代码:
vector <Person *> vp;
Run Code Online (Sandbox Code Playgroud)
甚至:
vector <shared_ptr <Person> > vp;
Run Code Online (Sandbox Code Playgroud)
而是使用值:
vector <Person> vp;
Run Code Online (Sandbox Code Playgroud)
您可以轻松添加到这样的矢量:
vp.push_back( Person( "neil butterworth" ) );
Run Code Online (Sandbox Code Playgroud)
并且为您管理Person和vector的所有内存.当然,如果你需要一组多态类型,你应该使用(智能)指针
在1)RAII,想法是自动删除,如果你发现自己在想"我刚刚打电话给新的,我需要记得在某处调用删除"然后你做错了.删除应该是a)自动或b)放入dtor(以及哪个dtor应该是显而易见的).
2)隐藏默认值.识别流氓默认拷贝ctors等可能是一场噩梦,最简单的方法是通过隐藏它们来避免它们.如果你有一个通用的"root"对象,所有东西都是继承的(无论如何都可以方便调试/分析)隐藏默认值,然后当某个东西试图分配/复制一个继承类时,编译器barfs因为ctor等不是在基类上可用.
归档时间: |
|
查看次数: |
501 次 |
最近记录: |