2016-10-22 44 views
0
Class name{ 
private: 
int *ptr=new ptr[10]; 

public: 
//do some thing 
~name(){ 
     delete ptr; //should I do this? 
    } 
}; 

创建此类后,如果我超出范围,应该写一个析构函数来自动处理这个动态分配的整数数组吗?Delete类中的动态分配数组

+0

是。所有“新”应该有一个“删除”电话。 – MayurK

回答

1

是的,你必须释放你分配的任何内存。但是使用new[]分配的内存必须使用delete[]释放,而不是delete

class name { 
private: 
    int *ptr = new ptr[10]; 

public: 
    //... 

    ~name() { 
     delete[] ptr; 
    } 
}; 

什么你应该做的是使用一个std::vectorstd::array相反,让它进行处理,内存管理你。

class name { 
private: 
    std::vector<int> ptr{10}; 

public: 
    //... 
}; 

class name { 
private: 
    std::array<int, 10> ptr; 

public: 
    //... 
}; 
+0

因此,如果我声明它是局部变量(局部于类),在类对象销毁时,局部变量将被自动销毁? –

+0

@NygenPatricia是的。非指针类成员在其包含的类被破坏时被破坏。 –