【发布时间】:2011-02-25 00:38:08
【问题描述】:
我想做类似以下模式的事情:
T* const pT = findT();
// Do some work
T* const pT2 = new T( *pT );
// Mutate the object pT2 refers to
delete pT;
// At this point, I want the scope of pT to end.
// I do not want the scope of pT2 to end
我知道我可以通过结束一个块来结束作用域,但它最终是这样的:
T* pT2 = 0;
{
T* const pT = findT();
// Do some work
pT2 = new T( *pT );
// Mutate the object pT2 refers to
delete pT;
}
这会导致 pT2 失去它的 const 限定符,因为我必须在它声明后分配给它。
我想要我的蛋糕,我也想吃它,我想要明确的常量和正确的范围!
除了结束块之外,还有什么方法可以结束变量的作用域?如果没有,是否有计划扩展标准以支持这一点?
【问题讨论】:
-
所以你想要指针 pT2 常量,而不是它所指的对象?
-
没错,我广泛使用 const 来消除出错的可能性并减少阅读代码的认知负担。当您看到我初始化一个 const 指针时,您不必考虑它在任何地方发生变异的可能性。
-
仅供参考,通常是 const-ness 导致 ppl 采用 const_cast 快捷方式并导致 UB
-
你能为
pT2写一个包装类,它有一个一次性分配,一旦分配就不允许任何其他分配?