Хранить указатели или объекты в классах?

Просто вопрос дизайна / оптимизации. Когда вы храните указатели или объекты и почему? Например, я полагаю, что оба этих работы (ошибки компиляции запрета):

class A{
  std::unique_ptr object_ptr;
};

A::A():object_ptr(new Object()){}

class B{
  Object object;
};

B::B():object(Object()){}

Я считаю, что одна разница приходит при создании на стеке или кучу?

, например:

   int main(){
      std::unique_ptr a_ptr;
      std::unique_ptr b_ptr;
      a_ptr = new A(); //(*object_ptr) on heap, (*a_ptr) on heap?
      b_ptr = new B(); //(*object_ptr) on heap, object on heap?

      A a;   //a on stack, (*object_ptr) on heap?
      B b;   //b on stack, object on stack?
}

также, SIZEOF (A) должен быть SIZEOF (B) ? Есть ли другие проблемы, которые мне не хватает? (Даниэль напомнил мне о проблеме наследования в своем родном посте в комментариях)

, поэтому, поскольку распределение стека быстрее, чем распределение кучи в целом, но размер меньших для A, не может быть, это один из этих компромиссов, которые не могут быть Ответил без тестирования производительности в том случае, рассматриваемая даже при перемещении семантики? Или некоторые правила больших пальцев, когда оно более выгодно использовать один над другим? (Сан-Джасинто скорректировал меня о распределении стека / кучи - быстрее, а не стек / куча)

Я догадаю, что больше копирования построения приведет к той же проблеме производительности, (3 экземпляра ~ 3x аналогичные характеристики, как инициирование первого ). Но перемещение построения может быть более выгодно использовать стопку как можно больше ???

Вот связанный вопрос, но не совсем одинаково. C ++ STL: Должен ли я хранить целые объекты или указатели на объекты?

Спасибо!

5
задан Community 23 May 2017 в 10:31
поделиться