【发布时间】:2013-10-11 21:48:43
【问题描述】:
C++
很多文献都说const 引用不能用来修改它们的引用对象,const 指针不能用来修改它们的指针。
那么,为什么他们会是deleted?
const int& cirDynamic = *( new int(5) );
// ^ 'const int& cirDynamic = *( &( *( new int(5) ) ) );' gives same output below
cout << cirDynamic << endl; // 5
delete &cirDynamic;
cout << cirDynamic << endl; // garbage value
我知道T* const 中的尾随 const 仅防止指针被重新定位,但在下面我使用两个consts,如const T* const,以强调。为什么下面的指针可以是deleted?
const int* const cipcDynamic = new int(5);
// ^ 'const int* const cipcDynamic = &( *( new int(5) ) );' gives same output below
cout << *cipcDynamic << endl; // 5
delete cipcDynamic;
cout << *cipcDynamic << endl; // garbage value
输出显示至少有一些动态分配的内存被释放。是否全部都被释放了,或者在只有副本被释放的情况下是否存在复制?
const 引用 sn-p (int&) 的非 const 版本和 const 指针 const sn-p 的非前导 const 版本(int* const 和 int*)产生相同的输出他们更多的 const 对应物。在所有 5 种情况下,为什么以及如何延长临时 new-expression 的生命周期?
如果数据类型是类或结构,则假设相应的运算符没有被重载、显式删除或设为非公共,标准是否做出以下保证:
解引用运算符提供对指针对象的直接访问
new运算符生成指向动态分配内存的指针,而不是原始动态分配内存的动态分配副本
如果 new 运算符重载但仍返回 ::operator new(size) 并且取消引用运算符重载但仍返回对对象的引用,是否有任何副作用会使这两点不成立?
【问题讨论】:
-
这方面需要解释什么?
-
是的,你需要更具体一点。你是在问为什么你首先看到一个
5显示,然后看到一个垃圾值? -
@KerrekSB @NateKohl :编辑它,质疑如果指针和引用是
const,为什么可以使用delete。
标签: c++ new-operator delete-operator const-reference const-pointer