我正在寻找一种A
在容器对象中插入多个类型对象的方法,而无需A
在插入过程中复制每个对象。一种方法是通过A
对容器的引用来传递对象,但不幸的是,据我所知,STL 容器只接受按值传递对象以进行插入(有很多充分的理由)。通常,这不是问题,但在我的情况下,我不希望调用复制构造函数并破坏原始对象,因为A
它是 C 库的包装器,其中包含一些指向内部结构的 C 样式指针,它将与原始对象一起被删除...
我只需要一个容器,它可以返回其中一个对象,给定一个特定的索引,并存储在运行时确定的一定数量的项目,所以我想也许我可以编写自己的容器类,但我不知道如何正确地做到这一点。
另一种方法是存储指向A
容器内部的指针,但由于我对这个主题没有太多了解,那么在 STL 容器中插入指向对象的指针的正确方法是什么?例如这个:
std::vector<A *> myVector;
for (unsigned int i = 0; i < n; ++i)
{
A *myObj = new myObj();
myVector.pushBack(myObj);
}
可能有效,但我不确定如何正确处理它以及如何以干净的方式处理它。我应该仅仅依靠包含 myVector 作为成员的类的析构函数来处理它吗?如果这个析构函数在删除其中一个包含的对象时抛出异常会发生什么?
shared_ptr
另外,有些人建议使用or auto_ptr
or之类的东西unique_ptr
,但我对这么多选项感到困惑。哪一个是我的方案的最佳选择?