首页 > 解决方案 > 如何将字符串指针数组转换为字符串类型的智能指针向量?

问题描述

我有这样的代码:

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数组和新向量中的内存。

如何做得更好?

标签: c++

解决方案


如果您想将所有权转移到向量,您可以执行以下操作(在此之后您不必释放任何内存。向量将管理它)

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);
}

请参阅为什么我不能将 unique_ptr 推回向量中?


推荐阅读