The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Правильная работа с памятью в обьектах., !*! Android, 11-Фев-05, 09:51  [смотреть все]
Подскажите пожалуйста(или дайте ссылку)  какой вариант из 2-х, приведенных  ниже способов создания обьекта внутри обьекта лучше и почему.Интересно в какой области памяти в каждом случае будет расположен обьект.

class A
{
private:
//...
public:
//...
};

// 1 ВАРИАНТ:
class B
{
A a_object;
//...
};

//2 ВАРИАНТ:

class B
{
A *a_ptr;
B();
~B();
//...
};

B::B()
{
a_ptr=new a;
}

B::~B()
{
delete a_ptr;
}
Заранее спасибо.

  • Правильная работа с памятью в обьектах., !*! klalafuda, 10:04 , 11-Фев-05 (1)
    >Подскажите пожалуйста(или дайте ссылку)  какой вариант из 2-х, приведенных  ниже
    >способов создания обьекта внутри обьекта лучше и почему.Интересно в какой области
    >памяти в каждом случае будет расположен обьект.

    http://ianzag.megasignal.com/ftp/pub/doc/books/book11/ru/

    // wbr

    • Правильная работа с памятью в обьектах., !*! Android, 11:11 , 11-Фев-05 (2)
      >http://ianzag.megasignal.com/ftp/pub/doc/books/book11/ru/
      >
      >// wbr

      Спасибо за ссылку на хорошую книгу,но в ней этот вопрос раасматривается с точки зрения логического проектирования агрегирования классов.У меня с этим всё в порядке.Конкретизирую свой вопрос:В какой области памяти(сегмент данных, стек, куча) будет расположен обьект класса B в первом и втором случае?
      И как лучше его разместить чтобы не было перееполнения(если мне нужно агрегировать в обьект  множество других "больших" обьектов) ?
      Буду признателен за ссылку на источник где подробно рассказывается о
      размещении обьектов в памяти(т.е где они размещаются при локальном/глобальном/выделении_при_помощи_new).Ещё раз спасибо.

      • Правильная работа с памятью в обьектах., !*! klalafuda, 11:20 , 11-Фев-05 (3)
        >Спасибо за ссылку на хорошую книгу,но в ней этот вопрос раасматривается с
        >точки зрения логического проектирования агрегирования классов.У меня с этим всё в
        >порядке.Конкретизирую свой вопрос:В какой области памяти(сегмент данных, стек, куча) будет расположен
        >обьект класса B в первом и втором случае?
        >И как лучше его разместить чтобы не было перееполнения(если мне нужно агрегировать
        >в обьект  множество других "больших" обьектов) ?
        >Буду признателен за ссылку на источник где подробно рассказывается о
        >размещении обьектов в памяти(т.е где они размещаются при локальном/глобальном/выделении_при_помощи_new).Ещё раз спасибо.

        http://ianzag.megasignal.com/ftp/pub/doc/books/c++/en/Addiso... - The C++ Programming Language (Special 3rd Edition).pdf

        // wbr

      • Правильная работа с памятью в обьектах., !*! klalafuda, 11:23 , 11-Фев-05 (4)
        Конкретизирую свой вопрос:В какой области памяти(сегмент данных, стек, куча) будет расположен
        >обьект класса B в первом и втором случае?

        где создадите объект - там и будет располагаться.

        >И как лучше его разместить чтобы не было перееполнения(если мне нужно агрегировать
        >в обьект  множество других "больших" обьектов) ?

        что в данном случае означает "переполнение" ?

        // wbr

        • Правильная работа с памятью в обьектах., !*! Android, 18:47 , 11-Фев-05 (5)
          >что в данном случае означает "переполнение" ?

          Переполнение означает stack overflow.
          Просто мне хотелось бы разобраться где размещаются члены-данные обьекта.
          И если необходимо разместить буффер большого размера в нутри класса, то как лучше это сделать, просто обьявить или динамически выделить?
          Предположим имеется класс:
          class A
          {
          //...
          char big_buff[131072];
          };
          //Если мы его обьявим внутри функции:
          void func(void)
          {
          A a_obj;
          return;
          }
          //То буффер разместится в стеке и мы получим переполнение.
          //Второй способ:
          Class A
          {
          //...
          char *big_buff;
          A();
          };

          A::A()
          {
          big_buff=new char[131076];
          };
          //В этом случае буффер будет рассположен в "куче" и переполнения не будет, так?
          Прав ли я?
          Спасибо за внимание.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру