如何为示例

时间:2018-04-10 17:26:40

标签: c++11 new-operator

我在查看有关单一继承的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;  
}

1 个答案:

答案 0 :(得分:2)

是的,简而言之。 Name只是一个指向char(或char数组)的指针。结构实例化不为此char(或数组)分配空间。您必须分配空间,并使指针(Name)指向该空间。在以下情况

DocLib[i]->Name = "Hello"; 

内存(用于“Hello”)分配在可执行文件的只读数据部分(加载时),并且指针只指向此位置。这就是为什么它不可修改。

或者你可以使用字符串对象而不是char指针。