को शामिल निम्नलिखित कोड पर विचार करें:बारे में सुरक्षित संचालन अद्वितीय संकेत
#include <memory>
struct Foo { std::unique_ptr<Foo> next; };
void f(Foo &foo) { foo = std::move(*foo.next); }
int main() {
Foo foo{};
foo.next = std::make_unique<Foo>();
foo.next->next = std::make_unique<Foo>();
f(foo);
}
foo = std::move(*foo.next);
करने से, foo.next.next
foo.next
में ले जाया गया है।
यदि foo.next
को पहले चरण के रूप में अमान्य किया गया है, तो ऑब्जेक्ट जिस पर इसे इंगित किया जा सकता है तुरंत हटा दिया जा सकता है। इससे foo.next.next
को हटाना होगा, यह वह ऑब्जेक्ट है जिसे मैं foo.next
पर ले जाने की कोशिश कर रहा हूं।
मुझे यकीन है कि मुझे अपने तर्क में कुछ याद आ रहा है, लेकिन मुझे पता नहीं चल रहा कि क्या गलत है।
क्या यह एक सुरक्षित संचालन है? मानक मुझे इसके बारे में कहां आश्वस्त करता है?