我有一个成员变量,它是一个禁止复制的类(删除了复制赋值运算符)。我想进行一些检查以确定将成员初始化为什么,因此我需要在构造函数中而不是在初始化列表中执行此操作。在进入 MyClass 的构造函数之前,成员变量 m 似乎已经用默认构造函数进行了初始化,那么构造函数的意义何在……对不起,c++ 咆哮。
简单的例子:
class MyClass {
NonCopy m;
MyClass() {
// Complex checks
if(success) {
m("success");
else {
m("failure");
}
}
Run Code Online (Sandbox Code Playgroud)
我看到的选项是:
只要该类具有有效的复制或移动构造函数,或者您使用的是 C++17+,您就可以创建一个执行逻辑的辅助函数,然后返回正确的对象。然后使用它来初始化您的成员。那看起来像
class MyClass {
NonCopy m;
static NonCopy initialize_noncopy()
{
// Complex checks
if(success) {
return NonCopy("success");
else {
return NonCopy("faulure");
}
}
public:
MyClass() : m(initialize_noncopy()) { }
};
Run Code Online (Sandbox Code Playgroud)