![]() |
1
3
你在这里遇到的问题是你没有改变
从严格意义上讲,对象的常量是被保留的,即使它的逻辑常量在你从任何东西的下面拉出地毯时被违反了。
正如john在注释中提到的,如果不能删除const对象中的指针指向的对象,那么最终将导致内存泄漏,因为在对象之后无法正确清理。 |
![]() |
2
4
A little less intuitive is the fact that you can
|
![]() |
3
2
常量是不变的,但这不能保证它们不能被删除。如果不允许删除,您将如何删除对象。 如果您试图修改t.p,那么会抛出一个错误,因为t是const。但是删除t是很正常的,即使它是常数。 |
![]() |
4
0
有:
…does not disallow operator delete from being called on
磷
. 有
典型的operator delete实现采用void*,任何指针都将隐式转换为它(实际上,这可能是采用void*的标准行为,或者是实现一个全局operator delete(可以删除任何内容)的唯一合理方法)。另外,作为一个有趣的消息,可以实现自己的重载操作符delete(全局删除或每个类删除),它采用void*,并且只需要释放new分配的内存。析构函数调用是在编译器调用operator delete之前隐式添加的;operator delete在其实现中不调用dtor。
It is also worth noting that having
因此:
换句话说,指针地址是不可变的,但指针不是。我经常在这里遇到很多关于成员函数常量和它对作为指针的数据成员的影响的混淆。了解这一点将使我们对迭代器和const_迭代器之间需要分离的原因之一有一点了解。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 7 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 7 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 7 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 7 月前 |