Возможный дубликат:
Когда следует использовать новое ключевое слово в C++?
Я не профессиональный программист, и у меня есть опыт работы с небольшими проектами, поэтому у меня мало проблем с пониманием того, что происходит здесь.
Обычно я создаю объекты, используя class_name var_name
. Но теперь я "обучаюсь" Objective-C, где почти все - указатель, и у вас больше контроля над использованием памяти.
Теперь я создаю приложение, содержащее бесконечный цикл.
Мой вопрос: какой вариант является лучшим способом управления использованием памяти (что приводит к меньшему использованию памяти)?
Нормальное выражение (для меня)
#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;
}
Использование 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. Это верно? Каковы [другие] различия между ними?
Я действительно смущен тем, где использовать каждый вариант.
Используйте первый вариант. Первый вариант создает экземпляр объекта в локальном хранилище, а второй - создает его в свободном хранилище (он же куча). Создание объектов в куче более "дорого", чем в локальном хранилище.
Всегда старайтесь избегать использования new
в C++ столько, сколько сможете.
Ответы на этот вопрос хорошо читаются: В C++ почему следует использовать new
как можно меньше?