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

时间:2015-04-18 09:24:21

标签: c++ constructor initialization raii

我会尝试总结一下我需要的单词和代码片段。

我有一个类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类很重要。)

非常感谢。

1 个答案:

答案 0 :(得分:4)

  

"但这不是一个选项,因为我需要在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;
 }