首页 > 解决方案 > 如何使用 new 在堆上保存类的字符串变量

问题描述

我有一个问题,我必须写一篇关于 C++ 动态内存管理的论文,但是我从来没有学过 C++。

对于我想展示的示例代码,如果在 Class 中使用 new 分配内存,为什么需要使用 Deconstructor。但我无法让我的代码工作。如何编写构造函数,以便使用 new 运算符分配字符串名称?

我已经拥有的代码:

class Studi
{
private:                         
    unsigned int matNr;    
    char* name;            
    
public:
    Studi(const string& k_name, unsigned int k_matNr) 
    {
        name = new char[k_name.length()];
        strcpy(name, k_name);
        matNr = k_matNr;    
    }
};

谢谢你的帮助 :)

标签: c++memory-managementdynamicconstructornew-operator

解决方案


  • 您必须为终止的空字符再分配一个字节。
  • 您可以使用c_str()std::string.
    Studi(const string& k_name, unsigned int k_matNr) 
    {
        name = new char[k_name.length() + 1];
        strcpy(name, k_name.c_str());
        matNr = k_matNr;    
    }

也不要忘记遵循三法则,以避免在复制对象时出现内存管理问题。


推荐阅读