УчитываяПеремещение shared_ptr к методу под названием на объекте в shared_ptr указывает на
struct X {
void f(std::shared_ptr<X>);
};
auto x(std::make_shared<X>());
я, вероятно, может безопасно сделать
x->f(std::move(x));
в C++ 17, потому что x->f
оценивали до аргумента X::f
построена, правда? Насколько я знаю, такой гарантии нет в более ранних версиях C++. Как я могу достичь чего-то подобного в C++ 11 и C++ 14?
PS: Обратите внимание, то же самое применимо даже при использовании std::unique_ptr
вместо std::shared_ptr
.
Это также подразумевает вопрос, является ли это безопасно уничтожить объект в пределах/при ограничении объема функции-члена одного и того же объекта. Из любопытства: Зачем вам это нужно? – Pixelchemist