我有一个令人沮丧的问题,我不确定如何表达或我做错了什么。
我正在尝试维护由 boost shared_pointers 引用的复杂结构的集合。 这些结构是由常规 C++ 模块创建的。我想用某种现有的容器类来做到这一点。所以 Dictionary(本来不错....)和 array 和 List 都出局了,因为它们无法处理非托管结构。这留下了类似 vector 的东西,但我似乎无法让它在 C++ CLI 中工作。 (我可以找到它,但是 vector 在构建过程中提示一些更进一步的东西。
我只是想知道其他人是如何做到这一点的。 boost 列表是更好的选择吗?理想情况下,我想将字符串名称与结构相关联,并且我想避免任何内存管理,但简单的解决方案是避免我。
好的,我想我知道问题是什么。这行不通:
vector<boost::shared_ptr<QuantLib::YieldTermStructure>> Curves;
因为是抽象类,vector处理不了。我想自动调整大小需要访问我可能没有的构造函数/析构函数/拷贝。天下没有免费的午餐。
这样的事情更糟:
Dictionary<String^, boost::shared_ptr<QuantLib::YieldTermStructure> >^ dictCurves;
由于托管句柄无法处理指针。 [我愿意承认我可能对这里的某些事情有错误的看法。如果结构如此脆弱,那么我要么需要深入研究如何复制/复制它们,要么需要更精细的处理机制(链表或其他)。]
最佳答案
Boost Pointer Container 可能适用于您的情况。
对于指针 vector :
boost::ptr_vector<QuantLib::YieldTermStructure>;
对于关联的指针容器(在这种情况下,键将是一个字符串):
boost::ptr_multimap<std::string, QuantLib::YieldTermStructure>
容器在您插入对象时获得对象的所有权,因此您无需手动删除对象。
http://www.boost.org/doc/libs/1_57_0/libs/ptr_container/doc/tutorial.html
关于c# - 无法在 C++ CLI 中维护指针集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796999/