привет!
есть такой класс:
struct base {};
struct base2 {};
struct derived
:base
,base2
{
derived(string &arg)
:base(arg)
,base2(arg)
{}
};
т.е. класс
derived не имеет своих данных.
класс
base хранит только ссылку, как и класс
base2. и тут я не понимаю, каким должен быть
move-constructor, и нужен ли он вообще?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>привет!
X>есть такой класс:
X>X>struct base {};
X>struct base2 {};
X>struct derived
X> :base
X> ,base2
X>{
X> derived(string &arg)
X> :base(arg)
X> ,base2(arg)
X> {}
X>};
X>
X>т.е. класс derived не имеет своих данных.
X>класс base хранит только ссылку, как и класс base2. и тут я не понимаю, каким должен быть move-constructor, и нужен ли он вообще?
Если в коде есть только то, что ты написал (например, деструктор явно не определен), то компилятор сгенерирует нужный move constructor сам.
X>base хранит только ссылку, как и класс base2. и тут я не понимаю, каким должен быть move-constructor, и нужен ли он вообще?
Для надежности лучше писать
derived(derived&&)=default;
Если base и впрямь хранит ссылку (в смысле &), то не скомпилируется, т.к. компилятор не сможет вывести код перемещения для ссылки (да и никто не сможет). Иначе — будет выведен перемещающий конструктор по умолчанию.
Как известно, 90% людей верят утверждениям, начинающимся со слов «как известно».
Здравствуйте, niXman, Вы писали:
X>привет!
X>есть такой класс:
лучше бы выложил рабочий код, а не набросок. меньше додумываать пришлось бы
X> и тут я не понимаю, каким должен быть move-constructor, и нужен ли он вообще?
нужно ли перемещение? это тебе решать, т.к. ты определяешь семантику классов
а вообще, компилятор вполне может сгенерить конструкторы сам. по смыслу перемещение должно сработать так, чтобы строка сама не двигалась. на нее просто имеют ссылку (можешь в голове думать об указателе) и при перемещении надо просто скопировать этот указатель. конструктор копии точно так же отработает.
см.
http://ideone.com/9Rc7SD