【发布时间】:2016-09-16 00:44:19
【问题描述】:
首先,我不是在谈论这样的问题(1、2)。我说的是一个已经有构造函数并且仅按值嵌套的类,而不是按定义嵌套...如果这有意义的话。
目前,我有这种方法,它有效,但使用 new 并且是丑陋的 IMO:
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 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(_value)(A需要一个额外的构造函数才能不带参数) - 扩展 A 类(需要将特定的私有成员更改为受保护的,并且会以不想要的方式网格化它们的“命名空间”)
-
memcpy()(A temp(_value); memcpy(&a, &temp, sizeof (A));) 的使用有问题
如果不采用上述方法,这可能吗?
【问题讨论】:
-
使用引用成员和构造函数初始化列表。
-
在这种情况下,引用比值有什么优势吗?似乎两者都是在创建
B时创建的,并且都具有相同的使用语法和语义。 -
不,我可能只是把你的问题弄错了。
-
@BradenBest 如果您没有理由使用参考,请不要。一个普通的
A a;肯定是你想要的。
标签: c++ class memory-management constructor