C++ 如何调用嵌套类的构造函数

C++ 如何调用嵌套类的构造函数,c++,class,memory-management,constructor,C++,Class,Memory Management,Constructor,首先,我不是在谈论这样的问题(,)。我说的是一个已经有构造函数的类,它只按值嵌套,不按定义嵌套……如果这有意义的话 目前,我有这种方法,它是有效的,但使用了new,并且在我看来是丑陋的: class A { private: int value; public: A(int _value); }; class B { private: A *a; public: B(int _value); }; B的构造器: B::B(int _value) {

首先,我不是在谈论这样的问题(,)。我说的是一个已经有构造函数的类,它只按值嵌套,不按定义嵌套……如果这有意义的话

目前,我有这种方法,它是有效的,但使用了
new
,并且在我看来是丑陋的:

class A {
private:
    int value;

public:
    A(int _value);
};

class B {
private:
    A *a;
public:
    B(int _value);
};
B的构造器:

B::B(int _value)
{
    a = new A(_value);
}
如果我改变
A*A
A
,如何创建
B
,以便以相同的方式调用
A
的构造函数

我试过:

B::B(int _value)
{
    a = A(_value);    // no matching function for call to ‘A::A()’
    a = A::A(_value); // cannot call constructor ‘A::A’ directly
    a(_value);        // no match for call to ‘(A) (int&)’
    a.A(_value);      // invalid use of `A::A`
}
如果没有:

  • 使用带有
    new
  • 使用一些显式的
    void A::init(_值)
    (需要为
    A
    提供一个额外的构造函数才能不带参数)
  • 扩展类A(需要将特定的私有成员更改为受保护的成员,并以不需要的方式对其“名称空间”进行网格划分)
  • memcpy()
    A temp(_值);memcpy(&A,&temp,sizeof(A));
    )的使用有问题

不使用上述方法是否可行?

您可以使用初始化列表

即B构造函数看起来像

class B {
   ...

   A a;
};

B::B(int _value) : a(_value) {
  ...
}

a
实际上是一个指针@πάνταῥεῖ 这正是OP想要摆脱的。@πάνταῥεῖ - 他说我们想把它从指针@πάντα改过来ῥεῖ 他为什么需要推荐人?@πάνταῥεῖ 你在说什么?我希望
a
是一个值(
a
),而不是指针(
a*
),也不是引用(
a&
)。这个答案回答了我的问题,并给出了我想要的答案。案例结束。使用引用成员和构造函数初始值设定项列表。在这种情况下,引用比值有什么优势吗?似乎两者都是在创建a
B
时创建的,并且都有相同的用法语法和语义。不,我可能只是把你的问题搞错了。@BradenBest如果你没有理由使用引用,请不要。一个普通的
A
无疑是您在这里想要的。