Форум программистов, компьютерный форум CyberForum.ru

Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор - C++

Восстановить пароль Регистрация
 
Igor Fender
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
26.07.2014, 23:04     Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор #1
Скажите правильно ли я выделяю и очищаю память под двухмерный вектор

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A
{
private: 
  std::vector< std::vector<int> >*  vec;
 
public:
  A()
  {
     vec = new std::vector< std::vector<int> >(10, std::vector<int>(10, 0));
  }
 
  ~A()
  {
    delete vec;
  }
}
Не будет ли здесь каких либо утечек?
Или как удобнее хранить вектор, если мне в конструкторе передаются размер и только тогда он заполняется.
Писал так, но у меня появляются сомнения, правильно ли это:

C++
1
2
3
4
5
6
  std::vector< std::vector<int> >  vec;
 
  A()
  {
     vec =  std::vector< std::vector<int> >(10, std::vector<int>(10, 0));
  }
Как лучше в таком случае хранить двухмерный вектор??


1) std::vector< std::vector<int> >
2) std::vector< std::vector<int> >*
3) std::vector< std::vector<int>* >*

Еще не пойму, что выгоднее 2 и 3 вариант?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2014, 23:04     Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор
Посмотрите здесь:

C++ Динамическое выделение памяти под двумерный массив
Динамическое выделение памяти под двумерный массив C++
Выделение памяти под двумерный массив C++
Выделение памяти под двумерный массив С++ C++
C++ Выделение памяти под двумерный массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.07.2014, 23:32     Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор #2
Если используете std::vector, то ручная работа с выделением/освобождением памяти не нужна.
C++
1
std::vector<std::vector<int> > arr2d; // это есть вектор векторов целых, т.е. по сути двумерный вектор.
Igor Fender
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
26.07.2014, 23:36  [ТС]     Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор #3
То есть такой способ подойдет??

C++
1
2
3
4
5
6
7
8
9
10
11
12
class A
{
private: 
  std::vector< std::vector<int> >  vec;
 
public:
  A(int width, int height)
  {
     vec = new std::vector< std::vector<int> >(width, std::vector<int>(height, 0));
  }
 
}
DrOffset
6420 / 3794 / 877
Регистрация: 30.01.2014
Сообщений: 6,584
26.07.2014, 23:39     Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Igor Fender Посмотреть сообщение
То есть такой способ подойдет??
Зачем тебе вообще тут new?

Добавлено через 52 секунды
C++
1
2
3
4
5
6
7
8
9
10
class A
{
private: 
  std::vector< std::vector<int> >  vec;
 
public:
  A(int width, int height)
     : vec(width, std::vector<int>(height, 0))
  {}
};
и все.
Yandex
Объявления
26.07.2014, 23:39     Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор
Ответ Создать тему
Опции темы

Текущее время: 20:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru