我有一个被大量引用的变量。它最初是一个自动变量。
现在我决定在一些代码中间我想调用它的 dtor 来重置它的状态,所以我打算释放并重新分配它。执行此操作的标准方法当然是调用 delete 并创建一个新的。
前:
void func() {
ClassName varname;
while (varname.check()/*...*/) { if (varname.function()/*...*/) { /* bunches of code ... */
/*... some more code ... */
}
}
}
现在我想要:
void func() {
ClassName varname;
while (varname.check()/*...*/) { if (varname.function()/*...*/) { /* bunches of code ... */
if (key_code[SDLK_r]) { // Pressing R key should reset "varname"!
/* Here I want to dealloc and realloc varname! */
/* But if I declare varname as a ptr on line 2, */
/* line 3 (rest of code) must be refactored. */
}
}
}
}
我的第一次尝试是将第 2 行更改为这样的
ClassName *varnamep = new ClassName();
ClassName& varname = *varnamep;
但我不确定这是否意味着我以后可以调用 delete 并重新分配参考!
delete &varname;
varnamep = new ClassName();
varname = *varnamep; // I assume compiler will error here because I can't reassign a ref.
我可以通过其他方式做到这一点吗?还是我应该把它吸起来,然后找一个替换varname.
成的varname->
?在这种特殊情况下,对于我的实际情况,我可能会实现一个成员函数reset()
,而不用担心这个实际问题。但是我想知道是否有一些捷径可以有效地将引用视为指针(或者可能会证明这是荒谬的废话)