Здравствуйте, 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, т.к. большой он может быть.