在构造函数初始化列表中调用非静态函数
Call non-static function in constructor initialization list, C++
我目前正在优化我的代码,在初始化我的类时,我想使用以下模式:
class MyClass
{
MyClass(int x) :
_x(x),
_collection(createCollection())
{
}
int functionThatDependsOnTheStateOfTheClass() const
{
return _x;
}
private:
std::vector<int> createCollection() const
{
std::vector<int> collection;
// The collection is dependent on _x somehow.
collection.push_back(functionThatDependsOnTheStateOfTheClass());
return collection:
}
const int _x;
const std::vector<int> _collection;
};
我完全理解让代码隐式地依赖于这样的初始化顺序是危险的,但是代码在其他方面是错误的吗?
注意上面的代码是非常简化的。我想做这件事的原因是:
- 我想把_collection标记为const.
- functionThatDependsOnTheStateOfTheClass()是我的程序中调用最多的函数之一(根据我的分析器),所以我宁愿不通过传递类的状态作为函数参数来创建开销。
所以我的问题是:我应该像躲避瘟疫一样避免这种模式,还是在某些情况下可以接受?
现在您的代码已经定义好了。类的非静态数据成员的初始化顺序为:
则,非静态数据成员应按其初始化顺序初始化是在类定义中声明的(还是不管顺序如何)
由于_x
在_collection
之前声明,因此_x
将被初始化,因此可以在functionThatDependsOnTheStateOfTheClass()
中使用。
相关文章:
- 生成模板实例列表并对其调用静态函数
- 从静态方法调用静态函数指针
- C 从虚拟函数调用静态函数
- 从外部调用静态C函数
- 从库中定义的进程调用静态函数
- Boost Python def 成员函数,它调用静态函数,其中 self 作为唯一的参数
- 在对象实例上调用静态函数时解析错误
- 在依赖范围内调用静态函数模板
- 对已删除的对象调用静态函数
- C++使用预定义参数调用静态函数指针
- cpp 正文线程的本地函数是否安全?如果是这样,从中调用静态函数呢?
- 在命名空间中调用静态函数时出错
- 从类模板的(部分)专门化调用静态函数
- 在c++中调用静态函数
- 无法调用静态函数
- 在c++中对模板形参调用静态函数
- c++全局/堆栈实例ctor/dtor调用静态函数时崩溃
- 如何调用静态函数
- 通过函数指针从外部文件调用静态函数的不良做法
- c++在从另一个类的主函数调用静态函数时遇到麻烦