Ответ 1
Если вы собираетесь хранить ссылку и использовать ее после завершения конструктора, вероятно, лучше всего, чтобы конструктор взял указатель:
struct C {
C(const X* p) : p_(p) { }
const X* p_;
};
Таким образом, в значительной степени гарантируется, что у вас не будет указателя на временный (если только X
не делает что-то действительно тупым, например, перегружает унарный &
, чтобы вернуть this
).
Если конструктор берет указатель, он также более понятен пользователям этого класса, что им нужно обратить внимание на время жизни объекта X
, который они передают конструктору.