move() constructor for this?
От: niXman Ниоткуда https://github.com/niXman
Дата: 13.10.16 20:21
Оценка:
привет!

есть такой класс:
struct base {};
struct base2 {};

struct derived
    :base
    ,base2
{
    derived(string &arg)
        :base(arg)
        ,base2(arg)
    {}
};

т.е. класс derived не имеет своих данных.
класс base хранит только ссылку, как и класс base2. и тут я не понимаю, каким должен быть move-constructor, и нужен ли он вообще?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: move() constructor for this?
От: andyp  
Дата: 13.10.16 21:09
Оценка: +1
Здравствуйте, 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 сам.
Re: move() constructor for this?
От: __gas  
Дата: 14.10.16 05:32
Оценка: +1
X>base хранит только ссылку, как и класс base2. и тут я не понимаю, каким должен быть move-constructor, и нужен ли он вообще?

Для надежности лучше писать
derived(derived&&)=default;
Если base и впрямь хранит ссылку (в смысле &), то не скомпилируется, т.к. компилятор не сможет вывести код перемещения для ссылки (да и никто не сможет). Иначе — будет выведен перемещающий конструктор по умолчанию.
Как известно, 90% людей верят утверждениям, начинающимся со слов «как известно».
Re: move() constructor for this?
От: uzhas Ниоткуда  
Дата: 14.10.16 09:14
Оценка: 12 (1) +2
Здравствуйте, niXman, Вы писали:

X>привет!


X>есть такой класс:

лучше бы выложил рабочий код, а не набросок. меньше додумываать пришлось бы

X> и тут я не понимаю, каким должен быть move-constructor, и нужен ли он вообще?

нужно ли перемещение? это тебе решать, т.к. ты определяешь семантику классов
а вообще, компилятор вполне может сгенерить конструкторы сам. по смыслу перемещение должно сработать так, чтобы строка сама не двигалась. на нее просто имеют ссылку (можешь в голове думать об указателе) и при перемещении надо просто скопировать этот указатель. конструктор копии точно так же отработает.

см. http://ideone.com/9Rc7SD
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.