读书人

C++指针的一个奇怪施用

发布时间: 2013-04-09 16:45:09 作者: rapoo

C++指针的一个奇怪应用
class A
{
public:
A(){};
A(int i){cout<<"传入的参数是:"cout<<i<<endl;}
};

int main()
{
A* a;
a[0] = 10;
a[1] = 20;
a[2] = 30;
system("pause");
}
输出结果:
传入的参数是:10
传入的参数是:20
传入的参数是:30

不明白这种用法的原理,既然声明的是指针对象,又没有用new来创建,那怎么删除对象呢?
[解决办法]
这种做法只能玩玩,即使得到正确的数值,你也不要认为这是正确的做法,当然也不要动态释放掉对象
[解决办法]
感觉应该是编译器优化的结果。。。
[解决办法]
该程序中创建的所有对象都是在栈中,不存在动态分配内存,哪里来的new和delete,不知道楼主在担心什么
[解决办法]
1. 使用了未分配的内存

道理和 如下


int *p;
p[0] = 1;
p[2] = 2;

一样


2. 发生了一个隐式转换a[0] = A(10);
只有一个参数(包括了n个参数,但有n-1个默认参数)的构造函数相当于定义了一个隐式转换。
你可以把你的A::A()写成explic试试看

读书人网 >C++

热点推荐