【发布时间】:2016-06-21 16:34:06
【问题描述】:
我有一个std::vector<std::unique_ptr<T>> vec1,其中 T 是一个抽象类型。我想创建std::vector<T*> vec2,其中第二个向量的指针指向的对象是第一个向量的指针指向的对象的副本。
例如:*(vec1[0]) == *(vec2[0]) 和 vec1[0].get() != vec2[0] ...等等...
怎么做?
【问题讨论】:
-
到底是什么问题?你不知道如何从
unique_ptr获取底层指针?还是别的什么? -
@SergeyA。我知道从
std::unique_ptr(get()方法)获取原始指针很热。但是如果我将它推到 vec2 则 vec2 将不会独立于 vec1。来自 vec1 的指针将指向与来自 vec2 的指针相同的内存位置。我需要对象的副本。 -
为什么?这是一个巨大的代码气味。 C API 采用
T**和所有权? :( -
@BarryTheHatchet 是的,我知道这很糟糕,但我需要这个“hack”(在 ut 测试中)。
-
打赌你不是真的 :)
标签: c++ c++11 vector smart-pointers unique-ptr