繁体   English   中英

C++ 栈上的对象——面试题

[英]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;
}

这里的关键是确保AC类型成员出现在它的B类型成员之前。 这样您就可以将例如对Ac_引用传递给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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM