【发布时间】:2026-02-03 07:55:01
【问题描述】:
通常可以通过更改成员在类中声明的顺序来更改成员初始化程序的运行顺序。但是,有没有办法让基类初始化器/构造器不先运行?
这是我的问题的最小草图:
class SpecialA : public A {
public:
explicit SpecialA(Arg* arg)
: member(expensiveFunction(arg))
, A(member) // <-- This will run first but I don't want it to
{}
private:
T member;
}
【问题讨论】:
-
将这些成员移动到另一个类中,只是为了容纳这些成员。然后从成员持有类和“基”类继承。
-
为什么还需要这样做?你可以传递一个
const T &arg,比如SpecialA(expensiveFunction(some_value)),避免整个问题。 -
@owacoder 我在构造函数中需要
Arg* arg,原因已从示例中剥离,并将expensiveFunction()限制在此范围内作为内部实现细节简化了类间设计。 -
@tennenrishin - 啊,我明白了。好吧,它是一个解决方案,虽然有点老套。 ;)
标签: c++ initialization