Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.04.2016, 15:32   #31
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Если Вам не по силам понять для чего что-то нужно, то это сугубо Ваши проблемы.
"

тебя за язык кто-то тянул ?

если что-то не нравится то это твои проблемы.

не засоряйте тему. тут речь только о Конструктор перемещения
RAFA91 вне форума
Старый 13.04.2016, 15:32   #32
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
тут создается обьект ?
Почему вдруг этот КОНСТРУКТОР, не будет делать того же, что и другие КОНСТРУКТОРЫ?

Цитата:
на какой обьект ссылается зыс ?
Вы прикидываетесь?

Цитата:
что будет если это не написать ?
move.data = 0;
Все как обычно. Я уже отвечал. В самом простом случае деструктор второго объекта убьет их.

Цитата:
когда удалится move ?
Когда и положено. Он ничем суперским не наделен. Выйдет за область видимости, вызовут делете,...
p51x вне форума
Старый 13.04.2016, 15:33   #33
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

нужен подробный код. на кусках это не протестируешь.
RAFA91 вне форума
Старый 13.04.2016, 15:35   #34
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Зачем дело встало? Не можете сами -> гугл - move constructor c++
p51x вне форума
Старый 13.04.2016, 15:38   #35
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
тебя за язык кто-то тянул ?
Не тыкай мне, мы не знакомы.
И слава Богу
Цитата:
Не можете сами -> гугл - move constructor c++
Думаете, поможет?

Человек изначально не мог этого сделать.
И вместо того, чтобы что-то узнавать,
начинает петь о том, что то, что лично
он не осилил - не нужно и бред.
Это больше похоже на клинику

Последний раз редактировалось Croessmah; 13.04.2016 в 15:40.
Croessmah вне форума
Старый 13.04.2016, 16:00   #36
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Зачем дело встало?
я с этим механизмом не работал и могу что-то неправильно слепить
RAFA91 вне форума
Старый 13.04.2016, 16:11   #37
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Croessmah, вы в первый раз видите его темы? Уже все привыкли к этому.

RAFA91, копи-паст из гугла - это проблема?
p51x вне форума
Старый 13.04.2016, 16:20   #38
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

по этому поводе не нашел внятного примера . все кусками как всегда
RAFA91 вне форума
Старый 13.04.2016, 16:21   #39
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
вы в первый раз видите его темы?
Просто я излишне эмоционален, простите


Сделаю одну попытку:
Код:
//g++  4.9.3

#include <iostream>
#include <cstring>


struct X
{
    X(size_t count)
        : m_data(new int[count])
        , m_count(count) 
    {
    }
    
    X(const X& src)// конструктор копирования занимается копированием данных
        : m_data(nullptr)
        , m_count(0)
    {
        m_data = new int[src.m_count];//Выделяем новый буфер
        m_count = src.m_count;
        memcpy(m_data, src.m_data, m_count*sizeof(int));//Копируем всю память (можно и циклом), но здесь у нас тип POD
        std::cout << "copy X data: copy " << m_count << " objects" << std::endl;
    }
    
    
    X(X&& src)// конструктор перемещения занимается перемещением данных
        //Вместо выделения памяти и копирования туда элементов мы можем просто
        : m_data(src.m_data)//Скопировать указатель на внутренний буфер src
        , m_count(src.m_count)//И размер
    {
        //Но нужно почистить объект src(в данном случае),
        //иначе, при удалении объекта src также будет и уничтожен наш буфер и уже
        //данный объект окажется невалидным 
        //и его использование может привести к неопределенному поведению.
        src.m_data = nullptr;//обнуляем указатель в источнике
        src.m_count = 0;//и размер
        //таким образом, мы "переместили" данные из src в новый объект
        std::cout << "move X data: copy one int* and one size_t" << std::endl;
    }
    
    ~X()//Деструктор просто чистит данные
    {
        delete[] m_data;
        m_data = nullptr;
        m_count = 0;
    }
    int* m_data;
    size_t m_count;    
};



//Аналогичный класс, только без конструктора перемещения
struct Y
{
    Y(size_t count)
        : m_data(new int[count])
        , m_count(count) 
    {
    }
    
    Y(const Y& src)
        : m_data(nullptr)
        , m_count(0)
    {
        m_data = new int[src.m_count];
        m_count = src.m_count;
        memcpy(m_data, src.m_data, m_count*sizeof(int));
        std::cout << "copy Y data: copy " << m_count << " objects" << std::endl;
    }
    
    ~Y()
    {
        delete[] m_data;
        m_data = nullptr;
        m_count = 0;
    }
    int* m_data;
    size_t m_count;    
};







X foo(const X& x1)
{
    return x1;
}


X foo(X&& x1)
{
    return std::move(x1);
}




X create_X(size_t count)
{
    return X(count);//Перемещение, т.к. объект временный и является rvalue
}


Y create_Y(size_t count)
{
    return Y(count);//копирование, т.к. объект временный и является rvalue, но нет конструктора перемещения
}




int main()
{
    {
        X x1(1000);//lvalue - x1
        X x2(x1);//Копируем x1 в x2
        X x3(std::move(x1));//Перемещаем данные из x1 в x3
        //сам std::move ничего не перемещает, 
        //а только приводит ссылку на lvalue (X&) к ссылке на rvalue (X&&)
    }

    {
        X x0(100000);
        std::cout << "\n\nstart foo(x0): copy data" << std::endl;
        X x1 = foo(x0);//Копирование 100000 объектов
        std::cout << "finish foo(x0): copy data\n" << std::endl;
        
        
        std::cout << "start foo(x0): move data" << std::endl;
        X x2 = foo(std::move(x0));//Копирование одного указателя и одного значения size_t
        //При этом x0 становится "пустым" и его удаление не отразится на x2.
        std::cout << "finish foo(x0): move data\n\n" << std::endl;
    }  
    
    {
        X x1 = create_X(50000);//Копирование 1 int* + 1 size_t
        Y y1 = create_Y(50000);//Копирование 50000 значиний int
    }
    
    
}
http://rextester.com/LINV48502

P.S. для показательной работы нужно отключить copy elision (rvo, nrvo), в облачной ide я это сделал.
Croessmah вне форума
Старый 13.04.2016, 16:51   #40
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Код:
class Base {
public:
    Base(int i){
        cout<<"create Base"<<endl;
    }
    Base(const Base& a){
        cout<<"create copy Base"<<endl;
    }
    Base(Base&& a)  //?????????????????????????????????????
{
        cout<<"create move Base"<<endl;
    }
    ~Base() {
        cout<<"deleting Base"<<endl;
    }
    Base reg(Base a){
        return a;
}
};
 
int main()
{
int i=1;
    {
        Base a(i);
        a.reg(a);
    }
    return 0;
}


Base(Base && a)
RAFA91 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработчик перемещения mitiay Общие вопросы Delphi 1 11.05.2015 20:50
Отслеживание перемещения picturebox Aleksa91 C# (си шарп) 7 15.06.2014 14:55
Планирование перемещения squid90 Фриланс 3 27.12.2011 21:48
Тормоза перемещения по DBGrid artemavd БД в Delphi 17 12.10.2010 17:52
С++ (конструктор, деструктор, копирующий конструктор) Jane-sad Помощь студентам 2 01.10.2010 10:01