Какой смысл "глубокой" копии констант ?Константы будут иметь одинаковое значение, несмотря ни на что!Так что просто скопируйте (то есть псевдоним) const-ссылки:
struct Foo
{
const int & n;
Foo(const int & m) : n(m) { }
Foo(const Foo & rhs) : n(rhs.n) { }
Foo copy() const { Foo f(*this); /* ... */ return f; }
// ...
};
Если вы беспокоитесь о висячих ссылках при возврате копии из функции со ссылкой на локальную переменную, то не делайтекласс имеет постоянные ссылки, но копии.Таким образом, вы естественным образом предоставляете своему классу семантику копирования, которая, по-видимому, вам нужна в любом случае.
Если вы думали, что могли бы создать гибрид, который либо не принадлежит, либо становится владельцем в зависимости от того, как вы его используете,тогда я бы сказал, что это плохой дизайн, который вы должны избегать.Решите, есть ли у вашего класса право собственности на данные или нет, а затем переходите к ним.