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消耗方面有什麼區別? (是否值得重構大碼時,我們就可以使用引用,而不是指針?)