类内/构造函数成员初始化

In-class / constructor member initialization

本文关键字:初始化 成员 构造函数 类内      更新时间:2023-10-16

我将尝试用单词和代码片段来总结我需要的东西。

我有一个类,Foo ,它包含一个类型为 Bar 的数据成员:

class Foo {
  public:
    Bar instance_of_Bar;
    Foo (int some_data) 
    {
      // I need to initialize instance_of_Bar using one of its
      // constructors here, but I need to do some processing first

      // This is highly discouraged (and I prefer not to use smart pointers here)
      instance_of_bar = Bar(..);
      // As an unrelated question: will instance_of_Bar be default-initialized 
      // inside the constructor before the above assignment?
    }
}

显然,"正确"的方法是使用如下所示的初始值设定项列表:

Foo (int some_data) : instance_of_Bar(some_data) {}

但这不是一个选项,因为我需要在将some_data传递给Bar构造函数之前对其进行一些工作。

希望我把自己说清楚了。RAII 以最小的开销和复制来做到这一点的方式是什么(Bar类是一个沉重的类)。

谢谢一堆。

"但这不是一个选项,因为我需要在将some_data传递给 Bar 构造函数之前对其进行一些工作。"

提供另一个功能来"在some_data上做一些工作"怎么样:

 Foo (int some_data) : instance_of_Bar(baz(some_data)) {}
 int baz(int some_data) {
     // do some work
     return some_data;
 }