如何在构造函数中初始化指向string的指针数组
How to initialize an array of pointers to string in the constructor
我想这样使用数组:
class Foo {
std::string *arrayOfPointersToString[]; // Array of pointers to string
int N;
public:
Foo(int capacity) : N(capacity) {
arrayOfPointersToString = new std::string[capacity];
}
};
但是我有一个错误:指针类型不兼容。我能做什么?
在不太了解动态分配字符串数组的原因的情况下,您可以使用以下命令:
std::string *stringArray = new std::string[5];
但是,如果你想要一个动态分配的字符串指针数组,一个可能的解决方案是使用:
class foo{
std::string ** arrayOfStringPointersToString;
public:
foo(int capacity) : N(capacity) {
arrayOfPointersToString = new std::string*[capacity];
}
}
需要注意的一个关键问题是,不能保证每个索引的值为空,因此对于每个索引,您需要
分别调用
new
并赋值。将它们赋值给另一个变量的地址。
此外,由于您将自己管理动态内存,请记住在使用new
分配的所有内容上调用delete
,并确保在使用new[]
分配的所有内容上调用delete[]
。
不兼容错误是因为您声明了数组来保存指针,但然后试图分配一个实际的std::string
对象数组而不是指针数组。
如果你想要一个指针数组,你需要修改你的new[]
语句来分配一个指针数组,而不是一个对象数组:
class Foo {
std::string* arrayOfPointersToStrings[];
int N;
public:
Foo(int capacity) : N(capacity) {
arrayOfPointersToStrings = new std::string*[capacity];
}
~Foo() {
delete[] arrayOfPointersToStrings;
}
};
但是,如果你想要一个对象数组,你需要修改你的数组声明,声明一个对象数组,而不是指针数组:
class Foo {
std::string* arrayOfStrings;
int N;
public:
Foo(int capacity) : N(capacity) {
arrayOfStrings = new std::string[capacity];
}
~Foo() {
delete[] arrayOfStrings;
}
};
无论哪种方式,您都应该使用std::vector
而不是手动使用new[]
/delete[]
:
class Foo {
std::vector<std::string*> arrayOfPointersToStrings;
public:
Foo(int capacity) : arrayOfPointersToStrings(capacity) {}
};
class Foo {
std::vector<std::string> arrayOfStrings;
public:
Foo(int capacity) : arrayOfStrings(capacity) {}
};
相关文章:
- 如何将 string.erase() 与指针一起使用?
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何将 std::string 赋回作为 <char>void* 指针传递的 std::vector.data()?
- 存储指向 std::string 数据的指针是否安全?
- C++ 如何在智能指针<string>上使用字符串::函数
- 从 'void *' 转换为 'const std::string *&' 必须具有所有中间指针 const 合格
- 为什么 std::string 不接受空指针?
- 多个std :: String临时,导致相同的C_STR指针
- C 11 STD :: Promise返回STD :: String从线程中返回String,数据指针看起来已复制
- 获取指向成员std::string::size的指针无法与libc++链接,但可以与libstdc++一起使用
- std::string 的函数指针的类型定义不起作用
- 将函数指针映射到 std::string
- 可以std::string reconfiguration使指向堆的指针无效
- 返回 std::string 时指针无效(libc 如此说)
- 使用 c_str() 返回的指针删除动态分配的 std::string 是否会导致C++内存泄漏
- 如何将 std::string 指针转换为 std::string
- std::string类成员应该是指针吗
- visual String使用c++中的指针进行复制,在复制过程中程序崩溃
- 为用soap_alloc创建的std::string指针赋值
- 是否有可能从std::string对象中分离char*指针?