Re[6]: Как объявить атрибутом класса объект другого класса?
От: Craftsman2004  
Дата: 24.11.14 15:07
Оценка:
Здравствуйте, enji, Вы писали:

E>Здравствуйте, Craftsman2004, Вы писали:



C>>>>
C>>>>    srcImage = &Gdiplus::Image(sPath,0);
C>>>>


E>>>Не надо так делать. Ты все таки почитай мануал


C>>Другого варианта я не знаю, как я писал new не работает в данном случае. Если есть вариант, подскажи, пожалуйста.


E>ты понимаешь, что тут происходит? Ты создаешь временный объект (который живет до конца выражения) на стеке и берешь его адрес. После перехода к следующей строчке объекта уже нет, вызвался его деструктор. И у тебя указатель на область памяти, в которой когда-то был объект. Дальше эта область памяти будет перезаписана новыми данными. Попытка позвать методы этого объекта или вызвать delete srcImage вероятно приведет к расстрелу памяти или срабатыванию аппаратной защиты. А может быть видимых проявлений не будет, зато если потом в другом месте поменять одну строчку — программа упадет.


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


E>ЗЫ С чего ты взял, что new не работает? Он чудесно работает. Напиши минимальный пример, запости сюда, если он работать не будет.

E>ЗЫЫ Лучше использовать не голые указатели, а unique_ptr, если есть такая возможность
E>ЗЫЫЫ А еще лучше выбрать время и почитать книжку

Спасибо!
C этим разобрался, на минимальном примере тоже все изучил, все работает как надо, но:
Пробую использовать опратор new с классом из GDI+:
Gdiplus::Bitmap *srcImage;
srcImage = new Gdiplus::Bitmap(sPath,0); //получаю ошибку: no instance of overloaded "Gdiplus::Bitmap::operator new" matches the argument list, argument types are: (unsigned int, const char [101], int). Но таких аргументов ни в одном конструкторе класса Bitmap нет. Конструктора без параметров тоже нет.


srcImage = Gdiplus::Bitmap::FromFile(sPath,0); //так работает, т.к. FromFile возвращает указатель на объект. Но мне хотелось бы создать объект в heap, т.к. большой он может быть.
Не люблю умников, люблю умных.
Отредактировано 24.11.2014 15:14 Craftsman2004 . Предыдущая версия . Еще …
Отредактировано 24.11.2014 15:13 Craftsman2004 . Предыдущая версия .
Отредактировано 24.11.2014 15:12 Craftsman2004 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.