C++ - 面试问题中的堆栈上的对象

Object on the stack in C++ - interview question

本文关键字:堆栈 对象 面试 问题 C++      更新时间:2023-10-16

类 A 有两个数据成员,它们是类 B 和类 C 的实例。类 B 需要创建类 C 的实例。我们必须在堆栈上创建一个对象 A 的实例,例如 main 函数中的 'A objA'。不应 anywhere.no 堆上的对象使用"new"运算符

堆上基本上没有对象。我最初使用"new"运算符执行此操作。但面试官说,就像里面只允许"一个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;
}

这里的关键是确保AC型成员排在B型成员之前。这样,您就可以将例如对Ac_引用传递给b_成员的构造函数。

如您所见,不需要new或任何类型的堆分配。一切都是在堆栈上创建的。

class C没有条件:

struct C{};

class B的唯一条件是它需要创建类C的实例:

struct B
{
explicit B(const C&) {}
};

最后,class A有 2 个成员,1 个为B型,另一个为C型:

struct A
{
C _c {};
B _b { _c };
};

我们现在可以创建一个类型A的对象,如您所提到的:

int main()
{
A a;
return 0;
}