q09*_*987 4 c++ const-correctness delete-operator
我看到代码片段如下:
class UPNumber {
public:
UPNumber();
UPNumber(int initValue);
...
// pseudo-destructor (a const member function, because
// even const objects may be destroyed)
void destroy() const { delete this; } // why this line is correct???
...
private:
~UPNumber();
};
Run Code Online (Sandbox Code Playgroud)
首先,我确信上面的类定义是正确的.这是我的问题,为什么我们可以像上面那样定义函数'destroy'?问的原因是为什么我们可以在const-member函数中修改'this'?
Jam*_*lis 10
这与以下工作相同:
const int* upn = new int();
delete upn;
Run Code Online (Sandbox Code Playgroud)
您可以delete指向const限定对象的指针.成员函数的const限定只意味着this有一个类型const UPNumber*.
const应用于方法的限定符具有使this传递给它的const指针的效果;特别是,在您的情况下,它将是const UPNumber *.
尽管如此,这不是问题delete:实际上,您可以delete在const指针上使用而无需强制转换任何内容,如 §5.3.5 ¶2 所述:
[注意:指向 const 类型的指针可以是删除表达式的操作数;在将指针表达式用作删除表达式的操作数之前,不必抛弃它的常量性 (5.2.11)。]
请注意,在标准完成之前,已经有很多关于这是否是一个好主意的讨论,因此一些未标准的编译器在尝试delete const指向指针时会发出错误。
允许这种行为背后的想法是,否则你将无法在delete const不使用const_cast; 的情况下处理对象。有关更多信息,请参阅此问题。
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |