C++ 为类构造函数中的指针分配内存

C++ 为类构造函数中的指针分配内存,c++,class,memory-management,constructor,operator-overloading,C++,Class,Memory Management,Constructor,Operator Overloading,我正在编写一个程序,但不理解在涉及类时如何使用指针。我知道我必须使用new为指针分配内存,在不使用类的情况下,我也可以这样做。但是,我找不到一个简单的教程来解释如何完成这项任务。有人能帮我一下吗?这是我到目前为止所做的相关片段,但它输出的是随机字符: "Hangman.c" { class Hangman { public: ... char* remainingLetters(); Hangman() { char* remaining=new char[26]; } ~Hangma

我正在编写一个程序,但不理解在涉及类时如何使用指针。我知道我必须使用
new
为指针分配内存,在不使用类的情况下,我也可以这样做。但是,我找不到一个简单的教程来解释如何完成这项任务。有人能帮我一下吗?这是我到目前为止所做的相关片段,但它输出的是随机字符:

"Hangman.c"
{

class Hangman
{
public:
...
char* remainingLetters();
Hangman()
 {
  char* remaining=new char[26];
 }
~Hangman();

private:
char* remaining;
}

"Hangman.cpp"
{

...
 char* Hangman::remainingLetters()
{
 ...does task to find remaining letters;

 return remaining;
 }

  ostream& operator<< (ostream &out, Hangman &game)
  {
    out << "Letters remaining are: " << game.remaining <<endl

    return out;
  }
}

"main.cpp"
{
...
cout << game;
...
}
“Hangman.c”
{
阶级刽子手
{
公众:
...
char*remaingletters();
刽子手
{
字符*剩余=新字符[26];
}
~Hangman();
私人:
剩余字符*;
}
“Hangman.cpp”
{
...
char*Hangman::remainingleters()
{
…执行查找剩余字母的任务;
返回剩余值;
}

ostream&operator您没有初始化您的成员。您应该:

Hangman()
{
   remaining=new char[26];
}
您的版本:

 Hangman()
 {
    char* remaining=new char[26];
 }
初始化名为
remaining
的局部变量,其作用域为构造函数

同样您应该
删除[]
析构函数中的内存,并实现复制构造函数和赋值运算符

Hangman()
{
  char* remaining=new char[26];
}

在构造函数中,您正在初始化局部变量,但不是类成员。此外,每个
new/new[]
都应分别与
delete/delete[]
关联,以避免内存泄漏。与其自己管理内存,不如改用智能指针。

以下几点要点:

  • 您需要使用
    new[]
    将内存分配给构造函数中的指针成员
  • 您需要使用析构函数中的
    delete[]
    取消分配内存
  • 您需要遵循三个规则

也请注意,在与类成员<代码>同名的构造函数中创建一个局部指针,最好是“UpIDIOUs”,并且应该适当地重命名它。

< P>如果使用C++字符串而不是C风格的char数组,大多数问题就消失了。
class Hangman 
{ 
public:
    std::string remainingLetters(); 

    Hangman()  { } 

private:
    std::string   remaining; 
};
“Hangman.cpp”


一方面是通过做

remaining=new char[26];
您正在为25个字母(+1个0字节)保留空间,这可能不是您想要的

问候


安德烈亚斯

在C++中,你不应该真的使用指针或<代码>新的< /代码>,尤其是如果你是初学者。它们是图书馆开发者的利基专家话题。要以不使用指针为主题,为什么不把成员变量声明为数组?即<代码> char剩余[26 ]。当你忘记释放析构函数中的内存时,你就不必担心内存泄漏之类的事情。@ JoaHixiBr.BG每次调用函数时都需要返回一个数组,如果我没有记错的话,C++中就不能完成。这就是我为什么尝试使用指针的原因。一个数组可以转换成一个相同类型的指针,即你可以做一些事情,比如“代码> char数组[26 ];char *指针=数组;PrtTf(“指针[1 ] = '%c' n,指针[1 ] ];< /Cord> @ AdoHythd -你可以使用<代码> STD::String < /Cord>来存储你的信件。C++字符串、数组都没有问题。“实现复制构造函数或赋值运算符”否!应该是“实现复制构造函数和赋值运算符”。这是正确的答案。但代码仍然不起作用。必须对此主题进行更多阅读。感谢您的输入
remaining=new char[26];