Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Copy constructor\assignment operator 
:(
    Опции темы
mrgloom
Дата 30.7.2013, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



что означает код


Код

class CImage
{  
    //...
    CImage& operator=(const CImage& img);
    CImage( const CImage& img );
};



собственно говоря это assignment operator и copy constructor ? но они без реализации? непонятно их назначение.
еще отдельно есть метод Clone.
Код

bool CImage::Clone( CImage& dst, DWORD Flags ) const


если у меня есть 
Код

CImage* pIm;
CImage* pClean;

pIm который уже на что то указывает и pClean который NULL как получить копию того что лежит в pIm в pClean?

PM MAIL   Вверх
SenkraD
Дата 30.7.2013, 11:09 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: нет
Всего: 23



Это может означать две вещи:
  • реализация лежит в другом месте (не всегда розделяют на пару файлов: иногда бывает что хедер один, а cpp-шников два и более)
  • (более вероятная) используется идиома NonСopyable, которая запрещает прямое копирование класса, где в вашем случае подразумевается прямое использование метода Clone вместо стандартного синтаксиса



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
mrgloom
Дата 30.7.2013, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



ну да получается NonСopyable, только я до конца не понял к чему это, видимо чтобы каждый объект отвечал только за свою память по указателю.

как тут написано 
http://habrahabr.ru/company/abbyy/blog/142595/

Вот простой пример:
Код


class DoubleDelete {
public:
   DoubleDelete()
   {
       ptr = new char[100];
   }
   ~DoubleDelete()
   {
       delete[] ptr;
   }

private:
   char* ptr;
};


В этом коде:

{
   DoubleDelete first;
   DoubleDelete second( first );
}



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

т.е. по идее мне надо удалить, то что по ссылке pIm и создать CImage newImage в который скопировать, то что в CImage clean_image и потом проставить указатель как pim= &newImage;

Это сообщение отредактировал(а) mrgloom - 30.7.2013, 14:41
PM MAIL   Вверх
SenkraD
Дата 30.7.2013, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: нет
Всего: 23



Цитата(mrgloom @  30.7.2013,  10:08 Найти цитируемый пост)
pIm который уже на что то указывает и pClean который NULL как получить копию того что лежит в pIm в pClean?
не увидел сразу.
Код

CImage* pIm = loadImageAndDoSomething();

CImage* pClean = new CImage();
pIm->Clone(*pClean, someFlags);

//Do something with clone


Это сообщение отредактировал(а) SenkraD - 30.7.2013, 15:23


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
bsa
Дата 30.7.2013, 22:34 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Дети, не ходите в Африку гулять не используйте MFC, она взорвет ваш мозг.
PM   Вверх
mrgloom
Дата 31.7.2013, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



а это не mfc'ый а самописный чей то.

при попытке включить CImage в какой то другой класс я получаю
Цитата

error C2248: 'CImage::operator =' : cannot access private member declared in class 'CImage'

это потому что operator = у CImage  private?
PM MAIL   Вверх
bsa
Дата 31.7.2013, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(mrgloom @  31.7.2013,  12:31 Найти цитируемый пост)
это потому что operator = у CImage  private? 
Да

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.