嘿大家我得到了一个简短的问题。我重新回到C ++并想知道这个
如果我有动态分配的对象:
MyObject* obj = new MyObject();
它内部有一个数组成员:
class MyObject
{
public:
MyObject();
~MyObject();
float array[16];
private:
};
只会进行正常删除:
delete obj;
在对象上释放所有内存(包括数组)?或者我需要为此做一些特别的事情吗?
答案 0 :(得分:3)
是的,你做得很好。该对象的所有内存都将被释放。
p.s。:如果你还在类中动态创建内存,你应该在析构函数~MyObject()
中释放它们的记忆。
例如:
class MyObject
{
public:
/** Constructor */
MyObject() : test(new int[100]) {}
/** Destructor */
~MyObject() { delete []test; }; // release memory in destructor
/** Copy Constructor */
MyObject(const MyObject &other) : test(new int[100]){
memcpy(test, other.test, 100*sizeof(int));
}
/** Copy Assignment Operator */
MyObject& operator= (MyObject other){
memcpy(test, other.test, 100 * sizeof(int));
return *this;
}
private:
int *test;
};
p.s.2.2:需要额外的复制构造函数和dopy赋值运算符才能使其跟随Rule of three。
答案 1 :(得分:0)
是的,如果数组的大小固定且未动态分配,则内存将在MyObject
的析构函数中释放。您可能会发现使用std::array
是一种更方便的方式来保存固定大小的数组:
#include <array>
struct MyObject {
std::array<float, 10> array;
};
此外,如果您要为MyObject
动态分配内存,我建议使用unique_ptr
之类的智能指针:
#include <memory>
auto my_object = std::unique_ptr<MyObject>(new MyObject);
//auto my_object = std::make_unique<MyObject>(); // C++14
如果你想要一个可变大小,动态分配的数组,我建议使用vector
:
#include <vector>
struct MyObject {
std::vector<float> array;
};
在这种情况下,当调用MyObject
析构函数时,将释放分配给数组的内存。