Jon*_*han 6 c++ memory int destructor
如果我有一个看起来像这样的类:
class SomeClass {
public:
SomeClass(int size) {
arr = new int[size];
someInt = size / 10;
};
~SomeClass() {
delete [] arr;
//do I need to somehow delete the int value 'someInt'?
};
private:
int *arr; //pointer to dynamically allocated array
int someInt;
}
Run Code Online (Sandbox Code Playgroud)
究竟应该包含在析构函数中以避免内存泄漏?
我知道我需要删除数组,因为它是动态分配的,但我是否需要对int值或其他基本数据类型做任何事情?
谢谢,乔纳森
sta*_*ust 18
没有.
但不只是基本类型.对于您未分配的任何内容,您new无需致电delete.即使是指针.
delete(以某种方式)与成员变量类型无关.重要的是,如果您已在构造函数(或类方法中的其他位置)中分配它(with ).new
经验法则是
Have as many delete as new
Have as many delete[] as new[].
Run Code Online (Sandbox Code Playgroud)
当然,有时你会得到delete一些你没有分配的东西,但是如果它不再需要则指向它(由其他人分配,但你是唯一使用它的人).
当然,有时你必须不 delete你的东西HAVE分配但别人指向(由你分配的,但其他人在使用它).
不,您不必手动删除自动变量.只有delete你new.
此外,您可以通过智能指针使用RAII来避免删除阵列.然后,您不必手动定义析构函数; 自动定义的析构函数将满足您的需求.
class SomeClass {
public:
SomeClass(int size)
: arr {new int[size]}
, someInt = size/10;
{};
private:
std::unique_ptr<int[]> arr; //pointer to dynamically allocated array
int someInt;
}
Run Code Online (Sandbox Code Playgroud)
使用更专业的类型更好,例如std::vector代替通用智能指针:
class SomeClass {
public:
SomeClass(int size)
: arr (size)
, someInt = size/10;
{};
private:
std::vector<int> arr;
int someInt;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6581 次 |
| 最近记录: |