Форум программистов, компьютерный форум, киберфорум
Наши страницы
Boost C++
Войти
Регистрация
Восстановить пароль
 
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
#1

Инициализация shared_array - Boost C++

28.01.2013, 00:46. Просмотров 1186. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
class Foo
{
..
boost::shared_array<Object> sobject; // создать нельзя т.к. поле классa
..
}
Foo::Foo // Пробую сделать это в конструкторе
{
    sobject = boost::shared_array<Object>(new Object[10]);
}
Но при первом же вызове sobject[2] программа ложиться, следовательно инициализируется только первый объект !

Кликните здесь для просмотра всего текста

Cказано что shared_array почти такой же как и scoped_array,а он в свою очередь инициализируется вот так:
C++
1
boost::scoped_array<MyObject> sobjects( new MyObject[ size ] ); // Выделяем

http://www.cyberforum.ru/cpp/thread44300.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2013, 00:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Инициализация shared_array (Boost C++):

Инициализация графического режима!
Кто может - помогите!!!! На экране сообщение: ...Device driver file not found...

Переплетение классов: объявление и инициализация
вощм... пишу программу... есть у меня например 2 класса: Object (объект) и tck...

Eigen - инициализация константной комлексной матрицы
Здравствуйте. Хочу в программе использовать комлексную матрицу, значения...

Инициализация полей объекта в заголовочном файле против списка инициализации
Говорят, что делать так не хорошо //.h class Foo { int intField...

Что такое инициализация сегментов или инициализация регистров?
Подскажите, что такое инициализация сегментов или инициализация регистров? Вот...

6
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
28.01.2013, 08:36 #2
C++
1
2
3
4
5
6
7
8
#include <boost/shared_array.hpp>
 
int main()
{
   boost::shared_array<int> ints(new int[5]);
   ints[4] = 1;
   std::cout << ints[4] << std::endl;
}
И все ок, все работает. Смотрите свой код, shared_array инициализирован ок. Ну и лучше инициализировать в списке инициализации все же, а не в теле конструктора.
1
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
28.01.2013, 18:43  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
boost::shared_array<int> ints(new int[5]);
Но область виденья такой переменной будет только функция main. Крайне важно чтобы это было именно поле класса?
ForEveR, Подскажите может я неправильно осуществляю доступ к массиву хотя вроде что sobject[2] что ints[2] одинаково?
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
28.01.2013, 18:58 #4
Но область виденья такой переменной будет только функция main. Крайне важно чтобы это было именно поле класса?
Без разницы. Это был просто пример.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <boost/shared_array.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>
 
class Array
{
public:
   Array() : array(new int[5])
   {
      std::fill(array.get(), array.get() + 5, 0);
   }
   friend std::ostream& operator << (std::ostream& os, const Array& obj)
   {
      std::copy(obj.array.get(), obj.array.get() + 5, std::ostream_iterator<int>(os, " "));
      return os;
   }
private:
   boost::shared_array<int> array;
};
 
int main()
{
   Array arr;
   std::cout << arr << std::endl;
}
http://liveworkspace.org/code/47VZ69$5
1
Dmitriy_M
1411 / 1294 / 125
Регистрация: 20.03.2009
Сообщений: 4,613
Записей в блоге: 11
29.01.2013, 20:51 #5
delete и delete [] одно и то же?
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
30.01.2013, 00:45 #6
Dmitriy_M, Не понят вопрос.. Это к чему? Нет, ни одно и то же. shared_array юзает как раз delete[], а scoped_ptr специализирован для T[].
0
Dmitriy_M
1411 / 1294 / 125
Регистрация: 20.03.2009
Сообщений: 4,613
Записей в блоге: 11
30.01.2013, 07:32 #7
ForEveR, простите недосмотрел.
0
30.01.2013, 07:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2013, 07:32
Привет! Вот еще темы с решениями:

Инициализация
Вот код: // Создаем новый класс Coor: class Coor { // данные (свойства):...

Инициализация
1. Создать класс Solid 2. Его наследует Planet 3. В функции Gravitation...

Инициализация матрицы
Здравствуйте. В 9 строчке где только }; написано выдается ошибка:...

Инициализация структур
Не могу уловить по какой причине первый вариант рабочий: А этот нет:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru