我是否需要删除析构函数中的基本数据类型?C++

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分配但别人指向(由你分配的,但其他人在使用它).


bam*_*s53 5

不,您不必手动删除自动变量.只有deletenew.

此外,您可以通过智能指针使用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)