поставил точку останова на строке
Создайте явно конструктор копирования Cell (Cell const &) и в нём поставьте брейк. Увидите по стеку, что вы внутри оператора new. Но вы всё равно кода new не увидите, его генерит gcc сразу в ассемблер.
Не заморачивайтесь про приоритет операций, это одна операция "new Cell (*this)", просто синтаксис new в C++ весьма морочный. Новички с других языков часто отождествляют new и конструктор объекта -- это совершенно разные вещи! Для пущей путаницы операторов new несколько:
1. обычный new
2. placement new
3. ещё целый зоопарк, но нам они не важны
Вы используете обычный new:
return new Cell (*this); //аргументы могут быть любые, главное чтобы существовал такой конструктор
Он (упрощенно) эквивалентен вызову функции:
C++ (Qt)
Cell *operator_new (Cell const &c)
{
Cell *ptr = (Cell*) malloc (sizeof (Cell));
if (ptr == 0)
throw std::bad_alloc ();
new (ptr) Cell (c); //***PLACEMENT NEW***
return ptr;
}
обратите внимание на конструкцию:
new (ptr) Cell (c);
это и есть placement new. По смыслу это
ptr->Cell::Cell (c);
, т.е. вызов конструктора копирования с this равным ptr, но просто вызвать конструктор как я написал нельзя -- компилятор ругнётся. Зачем так сделано я не знаю, но так обстоят дела. Этот placement new используется для написания контейнеров, но в обычной жизни можно без него обойтись.
P.S.: конструктор это именно функция, такая же как и остальные, просто с некоторыми отклонениями в части синтаксиса. А в записи "new Class (a, b, c)" никакого вызова функции нет, это вызов оператора new.