c++ - 初始化依赖于子类的继承类的常量类成员
问题描述
假设我有一个这样的模板基类:
class Util {
public:
Util(const std::string& suffix) : name(base_name + "." + suffix) {}
protected:
const std::string base_name = "Util";
const std::string name;
};
我想创建一些具有不同名称的子类。
我可以这样做:
class WorkingUtil : public Util {
public:
WorkingUtil() : Util("Working") {}
};
但不是这样:
class Bad1Util : public Util {
public:
Bad1Util() : Util(suffix) {}
private:
const std::string suffix = "Bad1";
};
也不是这个:
class Bad2Util : public Util {
public:
Bad2Util() : suffix("Bad2"), Util(suffix) {}
private:
const std::string suffix;
};
这是一个godbolt示例和错误:
在抛出 'std::bad_alloc'
what() 的实例后调用终止:std::bad_alloc
这里到底有什么问题?我可以像上面的例子那样做,但我想知道为什么其他的不可接受。
解决方案
-Wextra
用and编译你的代码-Wall
;
<source>:49:9: warning: field 'suffix' will be initialized after base 'Util' [-Wreorder-ctor]
suffix("Bad2"),
推荐阅读
- ios - 具有大于框架的突出显示图像的 UIButton
- javascript - DataTables selectall 第二页中的复选框显示已选中?
- angular - 当孩子从远程获取时如何动态添加或删除节点
- jsnetworkx - 如何将边缘标签添加到 Jsnetworkx 中的图形中
- javascript - 使用 Firebase 匿名身份验证,错误,无效 JSON
- javascript - JSON to Go 结构
- c - 在 C 中将数组声明为指针
- postgresql - spring boot登录应用程序:用户名或密码错误
- jquery - 我该如何解决这个错误:Uncaught ReferenceError: jQuery is not defined
- javascript - three.js 阴影效果与 Unity 3D 中的不一样