我在查看有关单一继承的Microsoft site。在给出的示例中(代码在末尾复制),我不确定如何将内存分配给Name。内存分配给10个对象。但Name是该类的指针成员。我想我可以分配像
这样的常量字符串DocLib[i]->Name = "Hello";
但是我们不能改变这个字符串。在这种情况下,我是否需要在相同的for循环中使用new运算符将内存分配给偶数名称
DocLib[i]->Name = new char[50];
Microsoft网站的代码在这里:
// deriv_SingleInheritance4.cpp
// compile with: /W3
struct Document {
char *Name;
void PrintNameOf() {}
};
class PaperbackBook : public Document {};
int main() {
Document * DocLib[10]; // Library of ten documents.
for (int i = 0 ; i < 10 ; i++)
DocLib[i] = new Document;
}
答案 0 :(得分:2)
是的,简而言之。 Name只是一个指向char(或char数组)的指针。结构实例化不为此char(或数组)分配空间。您必须分配空间,并使指针(Name)指向该空间。在以下情况
DocLib[i]->Name = "Hello";
内存(用于“Hello”)分配在可执行文件的只读数据部分(加载时),并且指针只指向此位置。这就是为什么它不可修改。
或者你可以使用字符串对象而不是char指针。