Какая необходимость в enable_shared_from_this ?
Я новичок в C++11 и наткнулся на enable_shared_from_this. Я не понимаю, чего он добивается? Итак, у меня есть программа, которая использует enable_shared_from_this.
struct TestCase: enable_shared_from_this<testcase> { std::shared_ptr<testcase> getptr() { return shared_from_this(); } ~TestCase() { std::cout << "TestCase::~TestCase()"; } }; int main() { std::shared_ptr<testcase> obj1(new TestCase); std::shared_ptr<testcase> obj2 = obj1->getptr(); // The above can be re written as below, then what is the need for shared_from_this() // std::shared_ptr<testcase> obj2 = shared_ptr<testcase>(obj1); }Мой вопрос в том, когда мне нужен указатель на '
this
- почему бы не использовать сам объект? Почему, чтобы вернуть 'this
- из функции такого класса, как использование getptr()
а потом возвращение shared_from_this()
????Я не понимаю.
Второй вопрос, если
enable_shared_from_this
не используется, почему dtor вызывается дважды, что создает проблему, сбой!!!!Еще один способ, который я могу обойти, используя
enable_shared_from_this
быть такой.Добавьте это в класс TestCase
std::shared_ptr<testcase> getptr1(shared_ptr<testcase> obj) { return std::shared_ptr<testcase>(obj); }
а из главного позвони это это:
std::shared_ptr<testcase> bp2 = bp1->getptr1(bp1);
И готово. Нам это не нужно
enable_shared_from_this
- С какой стати нам это нужно??Что я уже пробовал:
Я попытался поискать в google, но все, что мне удалось найти, - это то, что такое enable_shared_from_this, почему он используется. Но мой вопрос заключается в том, нет ли другой альтернативы enable_shared_from_this (как я уже упоминал в своем вопросе.)