gpt4 book ai didi

c++ - 构造函数的条件调用

转载 作者:太空狗 更新时间:2023-10-29 20:09:27 24 4
gpt4 key购买 nike

<分区>

假设某个类 foo 有两个自定义构造函数,比如 foo::foo(bar const &)foo::foo(baz const &)。根据某些条件调用任何一个被认为是好的风格。例如:

bar a;
baz b;
foo my_foo;
if (...) {
my_foo = foo(a);
} else {
my_foo = foo(b);
}

将要求 foo 是默认可构造的(这在我想到的具体情况下不是很明智)并且本质上是在创建(和删除)上浪费时间(和内存)默认构造的临时对象。由于范围的原因,不能在 if 或 else block 中声明 my_foo

另一种方法是使用指针并使用 new 进行构造。这会降低效率(间接,堆分配)并且可能不安全(不能保证指针不悬空;需要 delete,尽管后者可以通过使用 std::unique_ptr).

我找到了一种方法:

foo my_foo = (...) ? foo(a) : foo(b);

这是有效的,因为三元运算符保证是详尽无遗的,因此范围不是问题。

我不是三元运算符的忠实粉丝,可能想在调用 ctors 之前在条件 block 中做一些其他事情。有没有一种优雅的方法可以用传统的 if-else 语法实现同样的事情?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com