c++ - 使用不同的构造函数重新分配对象

标签 c++ constructor assignment-operator assign default-constructor

在类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/

相关文章:

c++ - 为什么将变量标记为常量?

c++ - 多次调用 realloc() 似乎会导致堆损坏

c++ - 使用构造函数c++将长整数转换为类对象

c++ - 为什么 std::declval<int>() = std::declval<int>() 无效?

c++ - 为什么编译后没有.o?

c++ - 具有两个参数之一作为 constexpr 的内联函数

c++ - 在构造函数初始化列表中初始化 std::vector 数组

java - 调用具有未知参数的构造函数

python - 为什么我不能将任意可迭代对象分配给步长为 -1 的扩展切片?

java - new 关键字的本地使用