c++ - 如何将字符串指针数组转换为字符串类型的智能指针向量?
问题描述
我有这样的代码:
std::string* string_ptr[] = { new std::string("x"), new std::string("y"), new std::string("z") };
我需要得到一个像这样的向量:
std::vector<std::unique_ptr<string>> vec;
我还需要清除原始string_ptr
数组和新向量中的内存。
如何做得更好?
解决方案
如果您想将所有权转移到向量,您可以执行以下操作(在此之后您不必释放任何内存。向量将管理它)
int main() {
std::string* string_ptr[] = { new std::string("x"), new std::string("y"), new std::string("z") }; // step 1
size_t sze = size(string_ptr);
std::vector<std::unique_ptr<std::string>> vec(sze); // step 2
for(size_t i{}; i < sze; ++i){
vec[i].reset( string_ptr[i]);
string_ptr[i] = nullptr;//transfer the elments ownership
}
}
如果您只想复制它们(您必须管理原始指针持有的内存)
int main() {
std::string* string_ptr[] = { new std::string("x"), new std::string("y"), new std::string("z") }; // step 1
size_t sze = size(string_ptr);
std::vector<std::unique_ptr<std::string>> vec(sze); // step 2
for(size_t i{}; i < sze; ++i){
;
vec[i].reset(new std::string{*string_ptr[i]});
}
vec.erase(vec.end()-1);
}
推荐阅读
- image - 即使在 pubspec.yaml Flutter 中指定了资产,图像也未在 GridView 中显示
- java - 如何找到双变量的 log 2 基数?
- ios - 自定义 UIView 未加载 XIB
- dataframe - Pyspark Dataframes - 如何在 3 列成为唯一键的情况下进行连接
- heroku - Heroku 上的 express-gateway - {$PORT} 绑定错误
- python - 为什么我必须将“uint8”转换为“float32”
- django - 带有可选字段习语的graphql-django更新突变?
- java - 在 Java 中使用 LIKE 查询时标识符无效
- excel - 浏览它们时如何使用获取列数据?
- windows - 对幻像 Windows 安装依赖项进行故障排除