ОФФТОП:
1) Object obj(); - это объявление функции obj без параметров, возвращающей объект класса Object. Объявление объекта obj делается без скобок: Object obj; Да, такие синтаксические тонкости.
2) про звездочку вам уже сказали
ПО ДЕЛУ:
1) Object obj;
"компилятор-компилятор, создай-ка мне автоматическую переменную с объектом в текущей области видимости. За пределами этой области видимости она не нужна, так что можешь убить его сам, чтобы я не парился на этот счет". Компилятор и убьет, т.е. вызовет деструктор и освободит память, если уже пора.
2) Object* obj = new Object();
"компилятор-компилятор, создай-ка мне автоматическую переменную-указатель obj, а также ручную переменную с объектом, расположив ее в динамической памяти (вместо стека/статического сегмента в 1-м случае) и дай мне ее указатель, я его сохраню в obj. Я этот указатель потом буду далеко передавать, записывать в другие структуры и объекты, так что ты, компилятор, не парься, я сам потом попрошу уничтожить объект и освободить память, когда буду знать, что уже можно".
Плюс первого варианта - время жизни переменной и объекта в ней совпадает с областью видимости. Вам следить за временем ее жизни не нужно, но при этом вы не сможете работать с переменной, если она уйдет из области видимости (например, грубейшая ошибка новичка - возвращать из функции указатель на локальную переменную). Следовательно, таким образом сложно создавать и использовать "долгоживущие" объекты, вроде окон или подключений к БД.
Плюс второго варианта - вы создаете и убиваете объект абсолютно в любом месте программы, но компилятор умывает при этом руки - вы запросили память, вам ее и освобождать. В языках со сборщиком мусора это делает сложный алгоритм, который анализирует достижимость объектов в памяти из программы. В C/C++ за этим следит программист.
Но программист может себе упростить жизнь с помощью умных указателей, добавьте себе на заметку, почитаете позже, когда разберетесь с основами.