在类MyClass
中,我有一个成员Dialog dialog_
。
MyClass
的构造函数被调用后,我想使用在 MyClass
的构造函数中创建的参数为 dialog_
调用一个不同的构造函数构造函数(这就是为什么我不能直接为 dialog_
调用不同的构造函数,而只能调用默认构造函数的原因)。
所以我试过了
dialog_ = Dialog(/* different constr. w/ parameters passed from MyClass */);
但这行不通。错误是
Error: no operator "=" matches these operands
operand types are: Dialog = Dialog
所以我用谷歌搜索了一下,在 this SO thread (3rd answer) 中找到了我试过的代码片段:
dialog_.~Dialog();
new(&dialog_) Dialog(/* different constr. w/ parameters passed from MyClass */);
而且它有效。线程中的答案虽然指出“虽然这的值(value)并没有超出纯粹的理论范围。但不要在实践中这样做。整个事情丑陋得无法描述。”
那么,如果不使用那段明显不受欢迎的代码,我能做些什么来解决我的问题呢?
希望您能理解我要实现的目标。谢谢!
最佳答案
有两种方法可以达到你想要的效果。
在 c++98 中,您需要将一些初始化推迟到从构造函数调用的 init() 函数。这有点恶心,因为它意味着对许多成员变量的冗余构造和赋值。
在 c++11 中,您可以调用初始化列表中的其他 1 个构造函数,传递计算值(这些值可以在静态函数中计算以保持清洁)。
如果您提供构造函数代码的示例,我可以告诉您如何操作。
关于c++ - 使用不同的构造函数重新分配对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23617301/