今天遇到的一个傻逼问题!!!简直了
在这段代码内要根据输入的值得到一个圆的对象,并且将这个对象的地址放到图像管理这个类的一个图像列表里。
while(-1!=input_type) {
if(2==input_type) {
Circle a;
std::cout << "Center X: ";
is >> a._x;
std::cout << "Center Y: ";
is >> a._y;
std::cout << "Radius: ";
is >> a._radius;
handle().figureList.push_back(&a);
cout<<&a<<endl<<a._x;
}
然后再将这个圆的数据从其他的函数里输出
cout<<handle().figureList.front()->_x<<endl;
**但是 发现这里输出的值一直是一个非常奇怪的值并不是当时添加时这个圆对象的值。
后来发现 简直是太傻逼了。。。。
在创建圆的对象的时候是Circle a;这样的方式创建的一个局部变量 在栈上!!!
当输入结束的时候,这个圆对象已经被释放了!!!所以就算我们保存了这个圆的地址,
再去想得到这个圆的数据的时候,也是错误的数据!!!
只有Circle* a = new Circle;这样的创建方式将这个圆创建在堆上,输入结束的时候才不会被释放!!!!**