嘿,我正在尝试理解指针和引用在使用安全性方面的区别。很多人说引用比指针更安全,因为它们不能为 null。但是对于以下代码,它表明引用可能会创建运行时错误,但指针不会:
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消耗方面的差异?(当我们可以使用引用时,是否值得重构大型代码以使用引用而不是指针?)