【问题标题】:How to allocate memory dynamically for class using new in C++?如何在 C++ 中使用 new 为类动态分配内存?
【发布时间】:2013-05-03 20:07:42
【问题描述】:

有以下课程:

class mem
{
  private:
        int data;
  public:
        mem(){}
        mem(int a)
        {
                data=a;
        }
        void dataDis()
        {
                cout <<"valu of i is "<< data << endl;
        }

};

如何使用参数化构造函数和new操作符为该类的10个对象分配内存?

【问题讨论】:

  • 你想要 10 个对象都在一个数组中,还是想要 10 个指向独立分配对象的指针?
  • 您希望它们全部初始化为相同的值,还是使用 10 个不同的值?您是特别需要使用new 还是更方便的std::array 或std::vector 可以接受?
  • @Adrian 我想要独立分配 10 个对象的数组和 10 个指针。
  • @Mike 不,我只需要使用 new 运算符进行分配,并且应该使用不同的值进行初始化

标签: c++ linux


【解决方案1】:

既然你说你需要直接使用new,那么你可以很容易地为十个单独的对象做到这一点:

mem * mem1 = new mem(42);
// and so on

使用new 分配数组时不能指定初始化器;您必须让它们默认初始化,然后重新分配它们:

mem * mems = new mem[10];
mems[0] = mem(42);
// and so on

不要忘记将它们分配给智能指针(或者在使用完它们后删除它们,如果使用 new 的奇怪要求也禁止其他形式的合理内存管理)。

当您发现自己在不那么疯狂的限制下工作时,请使用 std::array 或 std::vector 而不是随意分配原始内存:

std::vector<mem> mems = {42, 63, /* and so on */};

【讨论】:

  • 初始化向量的语法需要 C++11 中的新初始化列表功能 - 尚未在所有编译器中提供。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多