C++: Глобална променлива като указател

Аз съм нов в c++ и имам един въпрос към глобалните променливи. Виждам в много примери, че глобалните променливи са указатели с адреси на купчината. Така че указателите са в паметта за глобални/статични променливи и данните зад адресите са в купчината, нали?
Вместо това можете да декларирате глобални (без указател) променливи, които съхраняват данните. Така че данните се съхраняват в паметта за глобални/статични променливи, а не в купчината.
Това решение има ли някакви недостатъци спрямо първото решение с указателите и купчината?

Редактиране:
Първо решение:

//global 
Sport *sport;
//somewhere
sport = new Sport;

Второ решение:

//global
Sport sport;

person Maxii    schedule 25.08.2013    source източник


Отговори (3)


Недостатък на съхраняването на вашите данни в глобална/статична променлива е, че размерът е фиксиран по време на компилиране и не може да бъде променен за разлика от съхранението на купчина, където размерът може да бъде определен по време на изпълнение и да нараства или намалява многократно по време на изпълнение. Продължителността на живота също е фиксирана като пълното изпълнение на програмата от началото до края за глобални/статични променливи, за разлика от хранилището в купчина, където може да бъде придобито и освободено (дори многократно) през цялото време на изпълнение на програмата. От друга страна, глобалното и статичното управление на съхранението се управлява вместо вас от компилатора, където паметта на куп трябва да се управлява изрично от вашия код. Така че в обобщение, глобалното/статичното съхранение е по-лесно, но не толкова гъвкаво, колкото хранилището в купчина.

person Paul Evans    schedule 25.08.2013

Прав си в хипотезата къде се намират обектите. Относно употребата,
Това са коне за курсове. Няма определено правило, зависи от дизайна и типа функционалност, която искате да приложите. Например:
Човек може да избере версията на указателя, за да постигне мързелива инициализация или полиморфно поведение , нито едно от които не е възможно с глобален подход на обект без указател.

person Alok Save    schedule 25.08.2013

вярно Декларираните променливи отиват в DataSegment. И те стоят там през целия живот на програмата. Не можете да ги освободите. Не можете да ги преразпределите. В Windows DataSegment е с фиксиран размер....ако поставите всичко там, може да останете без памет (поне преди беше така).

person Steve Wellens    schedule 25.08.2013