【发布时间】:2016-08-07 05:16:37
【问题描述】:
我有以下情况:
T* get_somthing(){
std::vector<T> vec; //T is trivally-copyable
//fill vec
T* temp = new T[vec.size()];
memcpy(temp, vec.data(), vec.size() * sizeof(T));
return temp;
}
我想通过像这样直接返回std::vector::data来摆脱复制过程:
T* get_somthing(){
std::vector<T> vec; //T is trivally-copyable
//fill vec
return temp.data();
}
但是,这是错误的,因为当调用 vec 析构函数时,数据将被删除。
那么,如何防止 vec 删除其数据?换句话说,我想要某种从 std::vector 到 C++ 原始动态数组的移动习惯。
附:改变设计不是一种选择。使用std::vector 是强制性的。将pointer 返回到array 也是强制性的。因为它是两个模块之间的包装器。一个需要向量,另一个需要指针。
【问题讨论】:
-
有什么理由不返回向量?
-
我不明白为什么你必须使用向量,它在函数实现中,用户不应该知道你在做什么。 :)
-
顺便说一句,您可能想看看 N4359:open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4359.pdf 建议用于 C++17
-
我想这可以使用自定义分配器,但我不确定您的向量是否可以使用一个。
-
@TomaszLewowski 这在 LEWG 中被击落。