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];