0

我有一个类,它的唯一构造函数接受一个整数,我想在另一个类中使用它而不使它成为指针并使用 new/delete。

这甚至可能吗?

头等舱的相关部分:

class A
{
  private:
  int size; 
  char *c;

  public:
  A(int i)
  {
    size = i;
    c = new char[i];
  }
  ~A() { delete[] c; }
}

我想在示例类 B 中使用它,如下所示:

class B
{
  private:
  A a(7); // Declaration attempt #1
  A b; //Declaration attempt #2
  A *c; //This is what I'll do if I have no other choice.

  public:
  B()
  {
    b = A(7); //Declaration attempt #2
    c = new A(7);
  }
}
4

1 回答 1

4

()无法使用对象进行类内初始化,因为它被解释为函数声明。您可以使用成员初始化器列表来执行此操作:

class B
{
    A a;

    public:
        B() : a(7)
    //      ^^^^^^
        {}
};

这也适用于构造函数内的赋值,但推荐使用成员初始化器列表,因为初始化而不是赋值。

在 C++11 中,您可以使用统一初始化:

class B
{
    A a{7};                                                                    /*
    ^^^^^^^                                                                    */

    public:
        B() = default;
};
于 2013-06-13T00:36:42.203 回答