C++ - 面试问题中的堆栈上的对象
Object on the stack in C++ - interview question
类 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;
}
这里的关键是确保A
的C
型成员排在B
型成员之前。这样,您就可以将例如对A
的c_
引用传递给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;
}
相关文章:
- 作为指针注入类后重新创建堆栈对象不好吗?
- 堆分配对象中的堆栈对象在 c++ 中在哪里分配?
- 模板堆栈对象的数组;语法
- 有效地分配堆栈对象(由函数的值返回)到堆?
- 堆栈对象的强制转换指针
- 指向堆栈对象的指针是否在超出范围时被删除
- 重建堆栈对象
- 在执行中脱离堆栈对象的范围之前,请分配堆栈对象
- 堆栈对象"lost"会发生什么情况?
- 对 stl 堆栈对象大小的限制
- 堆栈对象"delete"的行为是什么?
- 为什么异常总是在具有可破坏堆栈对象的非叶函数中产生开销
- 是否可以为 CString 返回堆栈对象以及为什么 /GR 导致未定义的行为dynamic_cast
- 何时构造函数调用中的堆栈对象
- C++堆栈对象的构造函数异常处理
- 将没有成员的函子设置为类成员对象还是堆栈对象更有效
- 堆栈对象的动态强制转换失败
- 堆栈对象的最大大小
- 为什么我的堆栈对象在创建后会更改默认值
- 指向没有所有权的堆栈对象的指针