如何初始化数组的指针为字符串构造
问题描述:
我想以这种方式来使用数组:如何初始化数组的指针为字符串构造
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
并分配他们的价值观。将它们分配给另一个变量的地址。
此外,因为您将自己管理的动态内存,记得打电话delete
你用new
分配的一切,并确保你在你new[]
分配一切来电delete[]
。
+0
一个很好的动态内存资源是: http://www.cplusplus.com/doc/tutorial/dynamic/ – Eddge
答
不兼容性错误是因为您已声明该数组保持指针,但是然后尝试分配实际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) {}
};
为什么不使用'的std :: VECTOR'? – NathanOliver
'arrayOfPointersToString = new std :: string * [capacity];' –
它是赋值的一部分... – multiplayer1080