动态分配对象C ++

时间:2014-10-26 01:22:57

标签: c++ arrays object memory dynamic

嘿大家我得到了一个简短的问题。我重新回到C ++并想知道这个

如果我有动态分配的对象:

MyObject* obj = new MyObject();

它内部有一个数组成员:

class MyObject 
{
public:
   MyObject();
   ~MyObject();
   float array[16];
   private:
};

只会进行正常删除:

delete obj;

在对象上释放所有内存(包括数组)?或者我需要为此做一些特别的事情吗?

2 个答案:

答案 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析构函数时,将释放分配给数组的内存。