Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776

Использование shared_ptr

11.02.2016, 09:45. Показов 4424. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++ (Qt)
1
2
3
4
    std::shared_ptr<int> sp(new int);
    sp = 12;
 
    std::cout << sp;
Расшареному указателю нельзя присваивать стандартные типы? И как узнать на сколько объектов он ссылается?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2016, 09:45
Ответы с готовыми решениями:

Использование шаблонного типа в shared_ptr
Здравствуйте, я решил поупражняться на С++ и написать свой двунаправленный список: Node.h #pragma once #include...

Shared_ptr
Есть следующий код: int main() { std::map&lt;std::string, std::shared_ptr&lt;int&gt;&gt; mp; while (true) { add(mp); ...

C++ 11 shared_ptr
Есть вопрос из теста You have some code that creates a HardwareContext object representing a hardware resource. You need to do some...

14
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
11.02.2016, 09:51
Цитата Сообщение от Knjagskij Посмотреть сообщение
Расшареному указателю нельзя присваивать стандартные типы?
Это же указатель, поэтому
C++
1
*sp = 12;
Цитата Сообщение от Knjagskij Посмотреть сообщение
И как узнать на сколько объектов он ссылается?
C++
1
sp.use_count();
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
11.02.2016, 09:52
Цитата Сообщение от Knjagskij Посмотреть сообщение
Расшареному указателю нельзя присваивать стандартные типы?
Нет соответствующего конструктора. Все конструкторы принимают указатели, а не тип хранимого значения.
Что бы его поменять разыменовывайте указатель:
C++
1
*sp = 12;
Цитата Сообщение от Knjagskij Посмотреть сообщение
И как узнать на сколько объектов он ссылается?
long int use_count() const noexcept;
0
-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776
11.02.2016, 09:57  [ТС]
C++ (Qt)
1
2
3
4
5
6
    int a = 3;
    std::shared_ptr<int> p(new int);
    *p = a;
    std::shared_ptr<int> p2(new int);
    *p2 = a;
    std::cout << p.use_count();
Не работает
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
11.02.2016, 10:07
Цитата Сообщение от Knjagskij Посмотреть сообщение
Не работает
такое описание проблемы допустимо на форуме обсуждения гастарбайтеров, но мы на форуме программистов, поэтому сформулируй проблему достойно форуму программистов.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.02.2016, 10:12
Knjagskij, Почитайте уже что-нибудь пожалуйста. Что значит "не работает"?
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <memory>
 
int main()
{
   auto p = std::make_shared<int>();
   std::cout << p.use_count() << std::endl;
   auto copy = p;
   std::cout << p.use_count() << std::endl;
}
0
-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776
11.02.2016, 11:08  [ТС]
Ошибки в 3 и 5 строках, компилятор выдает ошибку при попытки присвоить значение указателю
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
11.02.2016, 11:17
Knjagskij, приведите текст ошибки.
0
-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776
11.02.2016, 11:39  [ТС]
Ilot,
ошибка: Exception at 0x0, code: 0xc0000005: write access violation at: 0x8, flags=0x0 (first chance)
ошибка: C2371: 'a' : redefinition; different basic types
see declaration of 'a'
ошибка: C2440: '=' : cannot convert from 'QCoreApplication' to 'int'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
11.02.2016, 11:46
вот это
Цитата Сообщение от Knjagskij Посмотреть сообщение
ошибка: Exception at 0x0, code: 0xc0000005: write access violation at: 0x8, flags=0x0 (first chance)
что-то крутое, если это действительно ошибка компилятора.

Остальные ошибки не имеют отношение к приведенному коду, кроме того, что ты переменную 'a' переопределяешь.
0
-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776
11.02.2016, 12:02  [ТС]
Почему переопределяю?
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
11.02.2016, 12:05
Цитата Сообщение от Knjagskij Посмотреть сообщение
Почему переопределяю?
Вы можете привести весь код и описание ошибки его компиляции?
Поймите чем больше вы предоставите информации тем быстрее вам помогут.
0
-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776
11.02.2016, 12:08  [ТС]
C++ (Qt)
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
27
28
#include <QCoreApplication>
#include <QDebug>
#include <QMatrix>
#include <QFile>
#include <QTextStream>
#include <QVector>
#include <QUuid>
#include <memory>
#include <iostream>
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
//    std::unique_ptr<int, std::default_delete<int[]> > up(new int[3]);
//    up[0] = 5;
//    up[1] = 2;
//    up[2] = 12;
 
    int b = 2;
    std::shared_ptr<int> sp(int);
    auto sp2 = sp;
    sp = b;
    sp2 = b;
    std::cout << sp.use_count();
 
    a.exec();
}
Новый вариант кода, с ошибками:
ошибка: C2659: '=' : function as left operand
ошибка: C2440: '=' : cannot convert from 'int' to 'std::shared_ptr<int> (__cdecl *)(int)'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
ошибка: C2228: left of '.use_count' must have class/struct/union
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
11.02.2016, 12:10
Цитата Сообщение от Knjagskij Посмотреть сообщение
Новый вариант кода, с ошибками
Вы вообще читаете что Вам пишут?
Цитата Сообщение от Ilot Посмотреть сообщение
Что бы его поменять разыменовывайте указатель
А здесь у нас
C++
1
std::shared_ptr<int> sp(int);
Что? Для этого
Цитата Сообщение от ForEveR Посмотреть сообщение
Почитайте уже что-нибудь пожалуйста.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
11.02.2016, 12:16
C++
1
2
3
4
5
6
7
8
9
10
#include <memory>
#include <iostream>
int main(int argc, char *argv[]) {
    int b = 2;
    std::shared_ptr<int> sp(new int);
    auto sp2 = sp;
    *sp = b;
    *sp2 = b;
    std::cout << sp.use_count();
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2016, 12:16
Помогаю со студенческими работами здесь

Shared_ptr
Всем хай. Есть некий класс и в нём такой метод: class Base { public: std::shared_ptr&lt;Base&gt; get_ptr() { ...

shared_ptr operator=
error: no match for 'operator=' (operand types are 'std::shared_ptr&lt;Node&gt;' and 'std::shared_ptr&lt;LogicalOperationNode&gt;') Вот такая ошибка,...

Shared_ptr vs make_shared
Всем добрый день! Такой вопрос - изучаю shared_ptr и make_share, и узнала, что разница между ними состоит в способе выделения памяти....

shared_ptr с потомками
Добрый вечер, сейчас столкнулся с задачей хранить большие объемы динамически-выделенной памяти. Обычный массив Base* list не подходит, т.к....

Weak_ptr и shared_ptr
Спасибо что зашли в эту тему и уделили мне время. Недавно увидел статью (не реклама) http://habrahabr.ru/post/191018/ Есть такой...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru