English 中文(简体)
改装的Stl集装箱
原标题:Templated Stl Containers
  • 时间:2009-10-19 15:36:55
  •  标签:
    template <class T>
    class container
    {
        typedef list<T> ObjectList;
public:
    ~container ()
    {
        for (typename ObjectList::iterator item = _Container.begin(); item != _Container.end(); item++)
        {
        if (*item) 
        delete (*item)
        }
    }
    }

如何通过删除点子内容释放集装箱货物? g++ 不允许使用该守则

最佳回答

您不想这样做——集装箱(如果是的话,是物体)。 为了删除这些项目,你需要告诉it,如:ObjectList.erase(项目);。 由于你(显然)删除了所有项目,你也可以使用:ObjectList.clear(>);和“skip”完全使用你的清晰通道。

接着,由于反对者显然是一个 st脚石:名单上的人,你不需要做上述任何事情——如果你摧毁一个 st子的话:名单上的人,就会自动销毁它所包含的任何物体。

Edit: (主要针对《世界团结》评论): 如果你再次试图建立一个集装箱点,以管理其所含点子指出的物品的去除,那么,你想要做的第一个事情就是确保其真正包含点人:

template <class T>
class container { 
    typedef typename std::list<T>::iterator it;
    std::list<T *> items;    // Note  T *  rather than just "T"
public: 
    ~container() { 
        for (it p=items.begin; it!=items.end(); ++it)
             delete *it;     // *it yields a pointer from the container.      
    }    
};
问题回答

参看:

  1. <代码>_Container从未得到申报。

  2. www.un.org/chinese/ga/president

  3. 您无需在<代码>delete之前测试一个点——您可以删除。 页: 1

  4. 您的先令是<代码>T。

  5. 不要像这样使用原材料——最好使用一些好的智能点。

http://www.boost.org/doc/libs/1_40_0/libs/ptr_container/doc/ptr_container.html” rel=“nofollow noreferer”>。

页: 1

template<typename T>
class container {
    typedef list<T> list_t;
    list_t container_;
    // no user-defined destructor needed
};

“集装箱”成员自行管理其要素。

但是,如果你想把点子储存到有活力的分辨器上,让集装箱拥有“所有权”(删除的响应性),那么你可以通过清单加以消化,并要求删除每个内容。 但是,如果该集装箱物体被复制或转让给另一个集装箱,你还需要考虑应该怎么做! 复制件将共用同一点,有些内容可能两次删除!

BTW:你不应使用从强调开始的名称。 这些名字保留。

或者,你可以使用能为你做所有辛勤工作的高压集装箱。

http://www.boost.org/doc/libs/1_40_0/libs/ptr_container/doc/ptr_list.html

  • there are typo errors
  • you are trying to delete which is not a pointer

www.un.org/Depts/DGACM/index_spanish.htm 希望 这将为你们工作!

template <class T>
class container
{

public:
    typedef list<T*> ObjectList;
    ~container ()
    {
        for (ObjectList::iterator item = _Container.begin(); item != _Container.end(); item++)
        {
            if (*item) 
                delete (*item);
        }
    }
    ObjectList _Container;
};

不清楚你试图执行什么,但如果你试图制造一个集装箱,将pointers/em>储存在物体上(而不是储存物体本身),那么更好的办法是制造一个智能点的集装箱(特定类型的智能点取决于你的意图)。 这将自动照顾目标寿命管理。





相关问题