doc_auto_unlink.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 83 行
CPP
83 行
///////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2006-2007//// Distributed under the Boost Software License, Version 1.0.// (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/intrusive for documentation./////////////////////////////////////////////////////////////////////////////////[doc_auto_unlink_code#include <boost/intrusive/list.hpp>#include <cassert>using namespace boost::intrusive;typedef list_base_hook<link_mode<auto_unlink> > auto_unlink_hook;class MyClass : public auto_unlink_hook //This hook removes the node in the destructor{ int int_; public: MyClass(int i = 0) : int_(i) {} void unlink() { auto_unlink_hook::unlink(); } bool is_linked() { return auto_unlink_hook::is_linked(); }};//Define a list that will store values using the base hook//The list can't have constant-time size!typedef list< MyClass, constant_time_size<false> > List;int main(){ //Create the list List l; { //Create myclass and check it's linked MyClass myclass; assert(myclass.is_linked() == false); //Insert the object l.push_back(myclass); //Check that we have inserted the object assert(l.empty() == false); assert(&l.front() == &myclass); assert(myclass.is_linked() == true); //Now myclass' destructor will unlink it //automatically } //Check auto-unlink has been executed assert(l.empty() == true); { //Now test the unlink() function //Create myclass and check it's linked MyClass myclass; assert(myclass.is_linked() == false); //Insert the object l.push_back(myclass); //Check that we have inserted the object assert(l.empty() == false); assert(&l.front() == &myclass); assert(myclass.is_linked() == true); //Now unlink the node myclass.unlink(); //Check auto-unlink has been executed assert(l.empty() == true); } return 0;}//]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?