我的课程包含字段:
private:
OrderUpdate curOrderUpdate;
我一遍又一遍地使用它,经常需要重新初始化:
for (int i = 0; i < entries.size(); i++) {
auto entry = entries[i];
new (&curOrderUpdate) OrderUpdate();
curOrderUpdate.MDEntryID = entry.get_MDEntryID().value()[0];
...
我有几个问题:
- 我可以使用变量还是必须将其更改为指针?改变
OrderUpdate curOrderUpdate
to OrderUpdate* curOrderUpdate
?
- 分配是强制性的吗?我应该写吗
curOrderUpdate = new (&curOrderUpdate) OrderUpdate();
要不就new (&curOrderUpdate) OrderUpdate()
足够的?
回答您的具体问题:
但是,为了确保代码安全,必须在重新调用构造函数之前调用析构函数。所以你可以像这样改变循环:
for (int i = 0; i < entries.size(); i++) {
auto entry = entries[i];
curOrderUpdate.~OrderUpdate();
new (&curOrderUpdate) OrderUpdate();
curOrderUpdate.MDEntryID = entry.get_MDEntryID().value()[0];
然而,这种低级代码最好保留用于very特殊情况,如工会和类似工会的结构。特别是,正如 @JamesKanze 在评论中指出的那样,如果构造函数抛出(并且析构函数并不简单),代码就会出现严重问题 - 然后您的对象将被破坏两次。
这将是much如果你只是添加一个更干净的设计reinitialise()
功能为OrderUpdate()
这将在不诉诸析构函数和构造函数调用的情况下做正确的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)