Каков наилучший способ управления временем жизни объектной переменной? [Дубликат]

1

Возможный дубликат:
Когда следует использовать новое ключевое слово в C++?

Я не профессиональный программист, и у меня есть опыт работы с небольшими проектами, поэтому у меня мало проблем с пониманием того, что происходит здесь.

Обычно я создаю объекты, используя class_name var_name. Но теперь я "обучаюсь" Objective-C, где почти все - указатель, и у вас больше контроля над использованием памяти.

Теперь я создаю приложение, содержащее бесконечный цикл.

Мой вопрос: какой вариант является лучшим способом управления использованием памяти (что приводит к меньшему использованию памяти)?

  1. Нормальное выражение (для меня)

    #include <stdio.h>
    #include <iostream>
    #include <deque>
    
    using namespace std;
    
    class myclass 
    {
      public:
        int a;
        float b;
        deque<int> array;
    
      myclass() {cout <<"myclass constructed\n";}
      ~myclass() {cout <<"myclass destroyed\n";}
      //Other methods
      int suma();
      int resta();
    };
    
    int main(int argc, char** argv)
    {
        myclass hola;
    
        for(1)
        {
            // Work with object hola.
            hola.a = 1;
        }
    
        return 0;
    }
    
  2. Использование new и delete

    #include <stdio.h>
    #include <iostream>
    #include <deque>
    
    using namespace std;
    
    class myclass 
    {
      public:
        int a;
        float b;
        deque<int> array;
    
      myclass() {cout <<"myclass constructed\n";}
      ~myclass() {cout <<"myclass destroyed\n";}
      //Other methods
      int suma();
      int resta();
    };
    
    int main(int argc, char** argv)
    {
        myclass hola;
    
        for(1)
        {
                myclass *hola;
                hola = new myclass;
    
            // Work with object hola.
            hola->a = 1;
    
            delete hola;
        }
    
        return 0;
    }
    

Я думаю, что вариант 2 использует меньше памяти и быстрее освобождает deque. Это верно? Каковы [другие] различия между ними?

Я действительно смущен тем, где использовать каждый вариант.

  • 0
    Теперь держись. Две версии не делают одно и то же. Итак, что на самом деле вопрос?
  • 0
    Спасибо за редактирование синтаксиса. Я схожу с ума, чтобы выразить это правильно.
Показать ещё 3 комментария
Теги:
memory-management

1 ответ

1

Используйте первый вариант. Первый вариант создает экземпляр объекта в локальном хранилище, а второй - создает его в свободном хранилище (он же куча). Создание объектов в куче более "дорого", чем в локальном хранилище.

Всегда старайтесь избегать использования new в C++ столько, сколько сможете.

Ответы на этот вопрос хорошо читаются: В C++ почему следует использовать new как можно меньше?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню