问题是我有一个大vector包含从本地缓存获取的大string内容,包装如下shared_ptr:
std::vector<std::shared_ptr<std::string>>
Run Code Online (Sandbox Code Playgroud)
但我的库 API 之一需要:
void forExample(std::vector<std::string>& data);
Run Code Online (Sandbox Code Playgroud)
在这个库中,数据只会被读取,没有修改,没有内存操作,只是读取。
那么如何在不复制大字符串的情况下正确传递数据,或者有其他更好的建议?如有必要,可以更改库 API 签名。
更改签名自
// bad
void forExample(std::vector<std::string>& data);
Run Code Online (Sandbox Code Playgroud)
到
// better
template <typename IT>
void forExample(It begin, IT end);
Run Code Online (Sandbox Code Playgroud)
需要更多一点来约束迭代器。但是,一旦您传递迭代器而不是整个容器,您就可以编写一个迭代器适配器,当迭代器被取消引用时,该适配器也会取消对智能指针的引用。
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |