【发布时间】:2018-11-10 16:24:00
【问题描述】:
我在 c++ 中有一个函数,其中包含我构建的对象的 2 个可选 c'tor(一个带有向量“vals”中的东西,其他没有)。
...
RecievedMessage a(sc, type);
if (!vals.empty()){
//a.~RecievedMessage();
RecievedMessage a(sc, type, vals);
}
return &a;
}
//中的行是可选的。
它会工作吗(有或没有可选行)?为什么?如果没有,如何在没有“vals”的设置器的情况下修复它? 非常感谢。
【问题讨论】:
-
不能返回指向本地对象的指针
-
这绝不是需要显式调用析构函数的情况。
-
if分支中的a与外部分支中的a无关。它不会替换它或覆盖它。它只是 隐藏 作用域的剩余部分(if分支)。 -
"
a.~RecievedMessage();" - 我能想到的唯一可以显式调用析构函数的情况是通过放置 new 和类似方法管理某个内存池中的对象时。多次调用对象的析构函数是未定义的行为,如果 you 显式调用它,然后编译器在超出范围时再次调用它,则 bam;前往 UB 土地的单程票。 -
return &a;将返回局部变量的地址 -> 悬空指针。 (或者你可能超载operator &...)
标签: c++ function object constructor return