注册 登录
编程论坛 C++教室

const对象的动态分配

独孤剑魔 发布于 2008-09-04 09:53, 1254 次点击
我在书中看到,c++允许动态创建 const 对象,例如;const int *p = new const int(1024)//前提是必须初始化
我在vc++6.0上测试,无法通过编译,以下是错误:
--------------------Configuration: vava - Win32 Debug--------------------
Compiling...
vwx.cpp
D:\c++程序\vava\vwx.cpp(6) : error C2468: 'new' : cannot allocate 'const'/'volatile' objects (type is 'const int')
D:\c++程序\vava\vwx.cpp(6) : error C2166: l-value specifies const object
Error executing cl.exe.

vava.exe - 2 error(s), 0 warning(s)

求教指点,谢谢。
4 回复
#2
BlueDreame2008-09-04 11:32
没有遇过,是不是VC6对标准支持不完善的关系。
#3
xyt_bluesky2008-09-04 15:59
const对象的动态分配

如果我们在自由存储区中创建的数组存储了内置类型的const对象,则必须为这个数组初始化,因为数组元素都是const对象,无法赋值。实现这个要求的唯一方法是对数组做值初始化:

//error:uninitialized const array
const int *pci_bad = new const int[100]
//ok:value_initiazed const array
const int *pci_bad = new const int[100]();
C++允许定义类类型的const数组,但该类类型必须提供默认的构造函数:

//ok array of 100 empty strings
const string *pcs = new const string[100]
在这里,将使用string类的默认构造函数初始化数组元素

当然,已创建的常量元素不允许修改------因此这样的数组实际上用处不大


我用的是VC9.0  能运行的  不知道其他的编译系统是否能运行
#4
独孤剑魔2008-09-04 19:37
误会了,我所说的不是指向const的数组,是一个const的对象,这个示例是 在 c++primer中看到的。
#5
liaojuncong2008-09-04 20:29
你把第二个const去掉看看能不能运行吧,要是不行可能是你那个软件的问题了
!!!
1