如何初始化类的char成员变量?

时间:2018-06-03 15:58:14

标签: c++ c++11

我在为字符类成员分配值时遇到问题:

class Node
{
 public:
    char c;
};

void main(void)
{   
    Node *node;
    node->c = 'a';
}

2 个答案:

答案 0 :(得分:2)

在为其分配值之前,您没有构建Node对象。您的node指针未初始化。

void main(void)
{
    Node *node = new Node; // <-- add 'new'
    node->c = 'a';
    delete node; // <-- add this, too
}

或者,在堆栈上的自动存储中创建Node对象,而不是堆中的动态存储。让编译器为您管理内存。

void main(void)
{
    Node node; // <-- no pointer
    node.c = 'a';
}

答案 1 :(得分:1)

由于您可能正在学习C ++,因此我建议您不要以C方式手动控制对象生存期并使用C ++内存管理功能。在您的简单示例中,您在为其成员分配值之前不构造Node对象。你的指针指向无处。如果使用C ++特性,编译器将负责所需的内存分配和释放。

#include <memory>
void main(void)
{
    auto node = std::make_unique<Node>(); // allocate Node object in the dynamic memory
    node->c = 'a';
} // Node object automatically destroyed and frees dynamic memory

您还可以指示编译器在函数本地堆栈上分配Node对象。

void main(void)
{
    Node node; // Node object on stack
    node.c = 'a';
} // Node object automatically destroyed, stack memory is freed.