问题描述
由于STL容器要求所有内容都是可复制和可分配的,在使用非可复制对象时,最好的习惯是什么?
Since STL containers require that all contents be copyable and assignable, what is the prefered idiom when working with non copyable objects?
我可以想出两种不同的方法:
I can think of two different approaches:
-
智能)指针而不是STL容器中的对象。
Store (smart) pointers rather than the objects in STL containers.
删除STL容器并实现我自己的列表(例如每个对象必须包含一个指向下一个目的)。
Get rid of STL containers and implement my own lists (e.g. each object must include a pointer to the next object).
第二种方法的主要缺点是析构函数的实现(如果next对象在当前对象之前被销毁)
Main drawback of the second approach is implementation of destructors (should the "next" object be destroyed before the current one in a recursive way?)
推荐答案
我会选择方法#1:ie store smart pointers
I'd choose approach #1: i.e. store smart pointers to objects in STL containers.
请注意,在STL容器中存储非拥有的原始指针(例如观察原始指针)是很好的,但是存储拥有原始指针是一个泄漏:使用 shared_ptr
+ 11的 unique_ptr
。
Note that it's fine to store non-owning raw pointers in STL containers (e.g. observing raw pointers), but storing owning raw pointers is a "leaktrocity": use shared_ptr
or new C++11's unique_ptr
instead.
划痕需要大量的时间和精力,我相信你不能在合理的时间框架内匹配丰富的商业质量的STL库。
As for #2, writing your own containers from scratch requires lots of time and energy, and I believe you can't match the richness of a full commercial-quality STL library implementation in a reasonable time-frame.
这篇关于STL容器和不可复制(和不可移动)对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!