C ++
许多文献说const
引用不能被用于修改其指示和const
指针不能用于修改其指针对象。
那么,为什么他们可以被delete
d?
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
在S,作为const T* const
,以示强调。 为什么以下指针delete
d?
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版本int&
和常量指针const的片断(的非主导const的版本int* const
和int*
)产生的输出作为其更常量对应相同。 在全部5个的情况下,为何以及如何被临时新表达的寿命延长?
假设相应的操作员尚未超载,显式删除,或由非公有制如果数据类型是一个类或结构,没有标准作如下保证:
反引用运营商提供的指针对象直接访问
在
new
运营商产生的指针动态分配的内存,而不是原始动态分配的内存动态分配的副本
相反,如果new
运营商超载,但仍返回::operator new(size)
和引用操作超载,但仍然返回到对象的引用,是否有任何副作用,这将使这两个点不成立?