Предположим, что следующий код:
Foo & foo = getFoo();
foo.attr; // 100% safe access?
Если foo
был указателем, я бы проверял, является ли он NULL
, однако, поскольку он является ссылкой, такая проверка не требуется. Я хочу знать, можно ли испортить ссылку на объект таким образом, чтобы он сделал доступ к его атрибуту небезопасным.
Я пробовал некоторые примеры, например, пытаться использовать NULL
для объекта foo
, но я получил ошибки компиляции. Я просто хочу быть уверенным, что вышеуказанный код всегда безопасен, и что нет возможной внутренней черной магии C++
, о которой я должен знать.
От Benjamin ответьте, я мог бы сделать пример кода, где я получаю ошибку сегментации из ссылки, поэтому он отвечает на мой вопрос. Я вставлю свой код на случай, если кто-то заинтересован в будущем:
#include <iostream>
using namespace std;
class B
{
public:
int x;
B() {x = 5;}
};
class A
{
public:
void f()
{
b = *(B*)NULL;
}
B & getB()
{
return b;
}
B b;
};
int main()
{
A a;
a.f();
cout << a.getB().x << endl;
return 0;
}