Russian Qt Forum

Программирование => С/C++ => Тема начата: yarick от Январь 17, 2013, 08:49



Название: Как создать массив "интеллектуальных" указателей из С++11?
Отправлено: yarick от Январь 17, 2013, 08:49
Читаю книгу "Прата - С++ лекции и упражнения", главу про указатели
Там сказано, что unique_ptr позволяет работать с массивами указателей, объявляем
Код:
unique_ptr<int[]> pIntAutoPtr1(new int(100));
Но вот размер массива в [] не указать... И где его указывать, как  с ним работать?


Название: Re: Как создать массив "интеллектуальных" указателей из С++11?
Отправлено: Old от Январь 17, 2013, 09:09
Читаю книгу "Прата - С++ лекции и упражнения", главу про указатели
Там сказано, что unique_ptr позволяет работать с массивами указателей, объявляем
Код:
unique_ptr<int[]> pIntAutoPtr1(new int(100));
Но вот размер массива в [] не указать... И где его указывать, как  с ним работать?

Код
C++ (Qt)
typedef unique_ptr<my_obj> my_obj_ptr;
 
std::vector<my_obj_ptr> objs( num_objs );
 
my_obj_ptr objs[ num_objs ];
 


Название: Re: Как создать массив "интеллектуальных" указателей из С++11?
Отправлено: m_ax от Январь 17, 2013, 16:00
Читаю книгу "Прата - С++ лекции и упражнения", главу про указатели
Там сказано, что unique_ptr позволяет работать с массивами указателей, объявляем
Код:
unique_ptr<int[]> pIntAutoPtr1(new int(100));
Но вот размер массива в [] не указать... И где его указывать, как  с ним работать?

Например так:
Код
C++ (Qt)
const unsigned Num = 100;
unique_ptr<int[]> pIntAutoPtr1(new int[Num]);
 
pIntAutoPtr1[0] = 123;
...
 


Название: Re: Как создать массив "интеллектуальных" указателей из С++11?
Отправлено: m_ax от Январь 17, 2013, 16:03
Читаю книгу "Прата - С++ лекции и упражнения", главу про указатели
Там сказано, что unique_ptr позволяет работать с массивами указателей, объявляем
Код:
unique_ptr<int[]> pIntAutoPtr1(new int(100));
Но вот размер массива в [] не указать... И где его указывать, как  с ним работать?

Например так:
Код
C++ (Qt)
const unsigned Num = 100;
unique_ptr<int[]> pIntAutoPtr1(new int[Num]);
 
pIntAutoPtr1[0] = 123;
...
 


Да, и кстати, из всех умных указателей так можно делать только с unique_ptr


Название: Re: Как создать массив "интеллектуальных" указателей из С++11?
Отправлено: Old от Январь 17, 2013, 16:17
Например так:

...работать с массивами указателей...


Название: Re: Как создать массив "интеллектуальных" указателей из С++11?
Отправлено: m_ax от Январь 17, 2013, 17:08
Например так:

...работать с массивами указателей...


Это да.. Но судя по его коду, скорее всего ТС неправильно сформулировал вопрос(
Или не до конца разобрался чего там в лекциях у Прата понаписано)
 


Название: Re: Как создать массив "интеллектуальных" указателей из С++11?
Отправлено: m_ax от Январь 17, 2013, 17:17
Например так:

...работать с массивами указателей...


и потом, для массива умных указателей, логичнее использовать shared_ptr, а не unique_ptr..


Название: Re: Как создать массив "интеллектуальных" указателей из С++11?
Отправлено: Old от Январь 17, 2013, 17:27
и потом, для массива умных указателей, логичнее использовать shared_ptr, а не unique_ptr..
Оно то конечно логичней, но мы то не знаем что там старик Прат пишет. :)