我想使用string.reserve(1000)
传递字符串,并确保在将其传递到不同结构时分配内存。是否有一种方法可以在每次实例化后都无需显式地执行此操作?
我想避免这样做:
struct Prefix{
std::string path;
};
int main() {
std::string path = "hel";
path.reserve(1000);
std::cout << path.capacity() << "\n"; // 1000
Prefix x = {path};
std::cout << x.path.capacity() << "\n"; // 15
x.path.reserve(1000);
x.path += somestring;
Prefix y = {x.path};
std::cout << y.path.capacity() << "\n"; // 15
y.reserve(1000);
}
答案 0 :(得分:3)
您必须显式地执行此操作,复制std::string
时也不需要编译器也复制容量。
您可以添加一个构造函数来为您完成。
struct Prefix{
std::string path;
Prefix(const string& p) : path(p) { path.reserve(p.capacity()); }
};
答案 1 :(得分:0)
如果不再需要原始字符串,则应移动而不是复制。
Prefix x = {std::move(path)};
从技术上讲,这不能保证保留容量,但是很难想象有理智的实现将无法正常工作。 (而且,SSO不会对此产生影响,它只是始终强制执行最小容量)。