3
嘿,我试图了解指针和参考安全使用中的区别是什么,很多人说参考比指针更安全,它不能为空。但对于下面的代码也显示,参考可以创建运行时错误,但不是指针:为什么参考比指针更安全?
class A {
public:
A(): mAi(0) {}
void ff() {std::cout << "This is A" << std::endl;}
int mAi;
};
class B {
public:
B() : mBi(0), mAp(NULL) {}
A* getA() const { return mAp; }
void ff(){std::cout << "This is B" << std::endl;}
int mBi;
A* mAp;
};
int main()
{
B* b = new B();
/// Reference part
A& rA = *b->getA();
rA.ff();
std::cout << rA.mAi << std::endl;
/// Pointer part
A* pA = b->getA();
if (NULL != pA)
{
pA->ff();
std::cout << pA->mAi << std::endl;
}
}
该代码会崩溃的“参考部分”而不是“指针的一部分”。 我的问题是:
为什么我们总是说,参考比指针安全,如果他们可能是无效的(如前面的代码),我们无法检查其无效?
使用指针或引用之间在RAM或CPU消耗方面有什么区别? (是否值得重构大码时,我们就可以使用引用,而不是指针?)