shared-ptr- все статьи тега


плохой слабый указатель, когда базовый и производный классы наследуют от boost:: enable shared from this

У меня есть базовый класс, производный от boost:: enable_shared_from_this, а затем еще один класс, производный как от базового класса, так и от boost:: enable_shared_from_this: #include <boost/enable_shared_from_this.hpp> #include <boost/shared_ptr.hpp> using namespace boost; class A : public enable_shared_from_this<A> { }; class B : public A , public enable_shared_from_this<B> { public: using enable_shared_from_this<B>::shared_from_this; }; int main() { s ...

Создание экземпляра shared ptr с помощью make shared

Рассмотрим следующий код: class A { .... shared_ptr<std::thread> mThread; void Step(); void LaunchTrhead(); } void A::LaunchThread() { ... mThread=make_shared<std::thread>(Step); // This line gives an error ... } void A::Step() { ... } Я пытаюсь инициализировать общий указатель mThread так, чтобы он вызывал функцию Step. Однако компилятор выдает мне ошибку "недопустимая инициализация ссылки типа ... из выражения типа "неразрешенный перегруженны ...

Почему работают std:: shared ptr

Я нашел некоторый код, использующий std:: shared_ptr для выполнения произвольной очистки при завершении работы. Сначала я думал, что этот код не может работать, но затем я попробовал следующее: #include <memory> #include <iostream> #include <vector> class test { public: test() { std::cout << "Test created" << std::endl; } ~test() { std::cout << "Test destroyed" << std::endl; } }; int main() { std::cout << "At begin of main.nc ...

Двойное наследование enable shared от этого

У меня есть объект (Z), производный от двух других объектов (A и B). A и B оба являются производными от enable_shared_from_this<>, соответственно enable_shared_from_this<A> и enable_shared_from_this<B>. Конечно, я вызываю shared_from_this() на Z. И, конечно, компилятор сообщает об этом как о неоднозначном. Мои вопросы таковы: безопасно ли наследовать дважды от enable_shared_from_this<> или это создаст два разделенных отсчета ссылок (плохо !) если не безопасно, как ...

C++ - передача ссылок на std:: shared ptr или boost:: shared ptr

если у меня есть функция, которая должна работать с shared_ptr, не было бы более эффективным передать ему ссылку на него (так, чтобы избежать копирования ...

Пример использования общего ptr?

Привет я задал вопрос сегодня о как вставить различные типы объектов в один и тот же векторный массив и мой код в этот вопрос gate* G[1000]; G[0] = new ANDgate() ; G[1] = new ORgate; //gate is a class inherited by ANDgate and ORgate classes class gate { ..... ...... virtual void Run() { //A virtual function } }; class ANDgate :public gate {..... ....... void Run() { //AND version of Run } }; class ORgate :public gate {..... ....... void Run() { ...

В чем разница между пустым и нулевым std::shared ptr в C++?

The cplusplus.com shared_ptr страница вызывает различие между пустойstd::shared_ptr и nullshared_ptr. The cppreference.com страница явно не вызывает различие, но использует как "пустой", так и сравнение с nullptr в описании std::shared_ptr поведение. есть ли разница между пустым и нулевым shared_ptr? Есть ли какой-либо вариант использования для таких указателей смешанного поведения? Совсем не пустой null shared_ptr смысла? Будет ли когда-нибудь случай в обычном использовании (т. е. если вы яв ...

общие ptr и слабые различия ptr

Я читаю книгу Скотта Мейерса " эффективный C++". Было упомянуто, что есть tr1::shared_ptr и tr1::weak_ptr действуют как встроенные указатели, но они отслеживают сколько tr1::shared_ptrs указывает на объект. это называется подсчетом ссылок. Это хорошо работает в предотвращении утечек ресурсов в ациклических структурах данных, но если два или более объектов содержат tr1::shared_ptrs Так что цикл формируется, цикл может держать отсчет ссылок друг друга выше нуля, даже если все внешние указатели ...