类内/构造函数成员初始化
In-class / constructor member initialization
我将尝试用单词和代码片段来总结我需要的东西。
我有一个类,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;
}
相关文章:
- 为什么在C++中首先初始化成员类
- 是否可以防止省略聚合初始化成员?
- 正在复制具有未初始化成员的结构
- 使用大括号或括号初始化成员变量
- C++结构:强制初始化成员?
- C++中未初始化成员布尔变量的默认值是多少?
- 使用默认值初始化成员引用
- 在构造函数中初始化成员时,是否应该在成员上使用 std::move?
- C++使用 { } 初始化成员变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 有没有办法在Brace中初始化成员
- 从现有 istream 或类本身创建的 istream 初始化成员 istream
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 通常应用方法,使用带有构造函数委托的 SFINAE 通过类模板的构造函数初始化成员
- 如何在嵌套类中初始化成员?C
- 是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
- 编译器错误,因为构造函数必须显式初始化成员
- 如何使用成员函数初始化成员函数指针
- C 如何使用隐藏的默认构造函数初始化成员