【发布时间】:2014-05-14 07:43:25
【问题描述】:
我的 testing.cpp 中有这个:
class Supp{
public:
virtual Supp* add(Supp& val) = 0;
};
class SubA : public Supp{
public:
int val;
SubA(int a){
val = a;
}
int getVal(){
return val;
}
Supp* add(Supp& value){
SubA& a = dynamic_cast<SubA&>(value);
int tempVal = a.getVal();
int sum = val + tempVal;
SubA b =SubA(sum);
return &b;
}
};
和线条
SubA b = SubA(sum);
return &b;
给出错误,因为它将地址返回到一个非常糟糕的局部变量,所以我将其更改为
SubA* b =new SubA(sum);
return b;
它工作正常,没有错误,但这基本上不是一回事吗?为什么这对编译器是合法的,而以前的版本不是?
【问题讨论】:
-
new不是返回指向局部变量的指针,而是返回指向动态分配内存的指针。另一个返回指向局部变量的指针。 “局部变量的地址”不是我熟悉的短语。 -
我被标题弄糊涂了。指针不只是包含地址吗?
-
是的,指针保存一个地址作为它的值。但是,这不会使指针成为地址。指针是类型,地址是值。
标签: c++ pointers return memory-address