[英]Object on the stack in C++ - interview question
类 A 有两个数据成员,它们是类 B 和类 C 的实例。类 B 需要创建类 C 的实例。 我们必须在堆栈上创建一个对象 A 的实例,如 main 函数中的“A objA”。 不应在任何地方使用“new”运算符。堆上没有对象
堆上基本上没有对象。 我最初使用“new”运算符执行此操作。 但是面试官说里面只允许'A objA'。 一旦执行完毕,就应该创建整个对象。
我猜面试官的意思是这样的:
struct C { };
struct B {
B (C & obj) { /* Do something with obj. */ }
};
struct A {
A ()
: c_()
, b_(c_)
{ }
C c_;
B b_;
};
int main () {
A objA;
}
这里的关键是确保A
的C
类型成员出现在它的B
类型成员之前。 这样您就可以将例如对A
的c_
引用传递给b_
成员的构造函数。
如您所见,不需要new
或任何类型的堆分配。 一切都是在堆栈上创建的。
class C
没有条件:
struct C{};
class B
的唯一条件是它需要创建类C
的实例:
struct B
{
explicit B(const C&) {}
};
最后, class A
有 2 个成员,一个是B
,另一个是C
:
struct A
{
C _c {};
B _b { _c };
};
我们现在可以创建一个你提到的类型A
的对象:
int main()
{
A a;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.