Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Gelo123321
21 / 21 / 8
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
#1

Как передать указатель на структуру так, чтобы потом иметь возможность корректно удалить его? - C++

29.08.2016, 12:48. Просмотров 269. Ответов 8
Метки нет (Все метки)


http://www.cyberforum.ru/cpp-beginners/thread667524.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2016, 12:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как передать указатель на структуру так, чтобы потом иметь возможность корректно удалить его? (C++):

Как передать в функцию указатель на структуру, если эта структура не определена глобально?
Проблема заключается в следующем: предположим есть некая структура, которая...

Как сделать указатель на структуру и получить так доступ к элементам?
Здравствуйте!Как сделать указатель на структуру и получить так доступ к...

Как передать указатель функции, чтобы значение переменной изменилось?
Имеются переменная и указатель на нее. int x, *y = &x; Как передать указатель...

как сделать так чтобы была возможность записывать и фамилию и имя,а то у меня только до пробела читает?
здраствуйте!скажите пож-та как сделать так чтобы была возможность записывать и...

Как сделать так чтобы при каждом выделении памяти в методе была возможность ее очистить и вернуть результат?
Доброго времени суток! Есть код класса и хотелось бы устранить в нем следующие...

8
Avazart
Эксперт С++
7674 / 5583 / 541
Регистрация: 10.12.2010
Сообщений: 25,046
Записей в блоге: 17
29.08.2016, 13:02 #2
Для этого есть std::shared_ptr
1
Gelo123321
21 / 21 / 8
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
29.08.2016, 13:08  [ТС] #3
Avazart, std::shared_ptr может работать с указателями, которые не определены в С++, а взяты со сторонних библиотек?
0
Avazart
Эксперт С++
7674 / 5583 / 541
Регистрация: 10.12.2010
Сообщений: 25,046
Записей в блоге: 17
29.08.2016, 13:20 #4
Не понял вопроса.
Что значит "указатели не определенные в С++" ?

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
27
28
29
30
31
32
33
#include <memory>
 
class Engine
{
    public:
        Engine():pointer_(new int(0)){}
        ~Engine() {}
        const std::shared_ptr<int>& getPointer()const {return pointer_;}
    private:
         std::shared_ptr<int>  pointer_;
};
 
class Box
{
    public:
        Box() {}
        ~Box() {}
        void setPointer(std::shared_ptr<int> pointer) {pointer_ = pointer;}
    private:
        std::shared_ptr<int>  pointer_;
};
 
int main(int argc, char *argv[])
{
    Engine *engine = new Engine();
    Box *box = new Box();
    box->setPointer(engine->getPointer());
 
    delete box;
    delete engine;
    
    return 0;
}
0
Gelo123321
21 / 21 / 8
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
29.08.2016, 13:22  [ТС] #5
Avazart, Неправильно сформулировал вопрос.
Я имел в виду с типами данных, взятыми из других библиотек, например: Box2D, SDL etc.
0
Avazart
Эксперт С++
7674 / 5583 / 541
Регистрация: 10.12.2010
Сообщений: 25,046
Записей в блоге: 17
29.08.2016, 13:23 #6
Почему нет?
Если память под них выделяется new/delete проблем не должно быть.
Если же удаляется иначе (не через delete) стоит указывать class Deleter в конструкторе см п 13

http://ideone.com/bHuRYS
0
Gelo123321
21 / 21 / 8
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
29.08.2016, 13:27  [ТС] #7
Avazart, а если память выделяется другим способом? К примеру:
C++
1
2
3
4
5
6
7
SDL_Renderer *render;
render = SDL_CreateRenderer(window,
        -1,
        SDL_RENDERER_ACCELERATED |
        SDL_RENDERER_PRESENTVSYNC);
 
SDL_DestroyRenderer(render);
0
Avazart
Эксперт С++
7674 / 5583 / 541
Регистрация: 10.12.2010
Сообщений: 25,046
Записей в блоге: 17
29.08.2016, 13:34 #8
Лучший ответ Сообщение было отмечено Gelo123321 как решение

Решение

http://stackoverflow.com/questions/1...-stdshared-ptr
2
Gelo123321
21 / 21 / 8
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
29.08.2016, 13:37  [ТС] #9
Avazart, Спасибо. Тему можно закрывать.
0
29.08.2016, 13:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2016, 13:37
Привет! Вот еще темы с решениями:

как передать структуру в функцию, чтобы после выполнения функции он(массив в данном случае) вернулся измененным?
const int size = 256; struct MARKER { char mark; } void...

Не могу разобраться как передать корректно передать массив из функции в функцию
//--------------------------------------------------------------------------- ...

Для типа данных unsigned long обеспечить возможность доступа как к числу целиком, так и отдельно к его битам
Для типа данных unsigned long обеспечить возможность доступа как к числу...

Как передать массив в функцию так, чтобы при выходе из функции он не изменялся?
Задачка: есть строка, которая состоит из символов. Символы соединяються в...


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

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

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