2015-01-26 3 views
1

В C++ Пусть яC++ - Разница между указателем класса и объекта класса при инициализации

class Sample{ 
public: 
void someFunction(); 
}; 

В основной() есть ли разница между выполнением

Sample obj; 
obj.someFunction(); 

AND 

Sample *obj = new Sample(); 
obj->someFunction(); 

Является ли это только вопрос синтаксиса или есть разница в производительности/реализации? Когда нужно использовать друг друга?

ответ

2

Это простые вещи - делать с кучами и стеки

Sample obj; 
obj.someFunction(); 

OBJ находится в стеке

И

Sample *obj = new Sample(); 
obj->someFunction(); 

находится на куче.

Это необходимо удалить. Он также живет вне рамок.

Производительность примерно в то же

+0

Почему производительность будет отличаться? – PDizzle745

+0

Это имеет смысл! Благодарю. – Arkantos

+0

Кэш процессора - Оптимизация проще для вещей в стеке –

2
Sample obj; 
obj.someFunction(); 

В этом случае, это статическое распределение. Память для obj выделяется в области стека функции main().

Sample *obj = new Sample(); 
obj->someFunction(); 

В другом случае вы динамически создавали объект, используя новый оператор. Он выделяется в памяти кучи. После его использования вы должны освободить его, используя оператор delete.

delete obj; 

Таким образом, нет другого отличия, кроме этого. В случае динамического распределения мы должны выделять и освобождать память по мере необходимости. Но в статическом распределении это распределение происходит при объявлении, а освобождение происходит, когда область переменной закончена.

+0

Это не статический объект –

Смежные вопросы