我有一个类,其唯一的构造函数接受一个整数,我想在另一个类中使用它而不使它成为指针并使用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);
}
}
答案 0 :(得分:4)
使用()
进行对象的类内初始化是不可能的,因为它被解释为函数声明。您可以使用member-initializer列表来执行此操作:
class B
{
A a;
public:
B() : a(7)
// ^^^^^^
{}
};
这也可以在构造函数中使用赋值,但建议使用成员初始化列表,因为初始化而不是赋值。
在C ++ 11中,您可以使用统一初始化:
class B
{
A a{7}; /*
^^^^^^^ */
public:
B() = default;
};