【发布时间】:2017-04-16 16:18:11
【问题描述】:
我目前正在从事一个项目,该项目需要我有一个向量来存储指向同一类但具有不同模板值的对象的指针。我想使用 shared_ptrs 的原因我不会太深入(主要是如果我想在两个 ColumnLists 之间共享一个 Column)。
我需要能够从函数中返回一个转换后的指针(如下所示)。
所以这里有一个非常简化的版本:
template <typename ColType>
class Column {
std::vector<ColType>;
};
template <typename ...TypesOfColumns>
class ColumnList {
private:
std::vector< std::shared_ptr<void> > columnsVector;
/* Needs to have a vector storing pointers to multiple Columns
all with different template values */
public:
template <typename ReturnType> std::shared_ptr<ReturnType> GetPointer(int index)
{
return std::static_pointer_cast<ReturnType>(columnsVector.at(index));
};
};
我想知道我是否在这里遇到了某种类型的未定义行为?它会像我希望的那样工作吗:返回转换后的类型是否只会在 void 指针的强引用计数器中添加一个?可以先删除一个再删除另一个吗?我是否冒着内存泄漏的风险,其中一个被删除而另一个没有被删除(我怀疑是这种情况)?
一如既往,感谢大家的帮助!!!
【问题讨论】:
-
@cpplearner 我不同意。 “此代码有效,我可以让它变得更好吗”适合 CR。 “此代码似乎有效,但确实有效”不是。
标签: c++ pointers casting shared-ptr