C++ 如何使用C+中的默认构造函数将char*设置为NULL+;?

C++ 如何使用C+中的默认构造函数将char*设置为NULL+;?,c++,pointers,constructor,C++,Pointers,Constructor,我正在尝试使用默认构造函数将此char*设置为NULL。 但我面临着麻烦。 问题在于我使用默认构造函数并设置m_name=NULL class Car { char *m_name; int m_carnum; public: Car() :m_carnum(0), m_name = NULL {} //this line has the error ~Car(){} }; 虽然此代码似乎正在运行: Car() :m_carnum(0) { m_name

我正在尝试使用默认构造函数将此char*设置为NULL。 但我面临着麻烦。 问题在于我使用默认构造函数并设置
m_name=NULL

class Car {
    char *m_name;
    int m_carnum;
public:
    Car() :m_carnum(0), m_name = NULL {} //this line has the error
    ~Car(){}
};
虽然此代码似乎正在运行:

Car() :m_carnum(0) {
    m_name = NULL;
}
那我为什么这不起作用


m_name=NULL

像int一样实例化它。您还需要确保按照声明的顺序实例化成员变量(请参阅)


如果你正在处理一个指针,如果使用C++ 11和Ex:

,下面的建议可能是明智的(被认为是好的实践)。
Car() : m_name(nullptr), m_carnum(0) {}
这里概述了这一点背后的原因(以及快速搜索的其他地方):

如果您有问题,请解释您的问题。读你说的
m_name=NULL正在工作。然后你会问为什么
m_name=NULL不起作用。那没有道理。您没有
m_name=NULL
在非工作版本中,您只有
m_name=NULL
。并不是说如果在那里插入分号就行了,但重要的是要精确。编译器是,如果你不是,你肯定会在将来遇到很多其他问题。回答不错。但是关于这个建议的一些解释
请确保按照声明的顺序实例化成员变量
。最好不要使用
char*
来存储name@berilac谢谢你的回答。@M.M说得对。您可以推荐
std::string
?对于可变长度的名称,考虑<代码> char */COD>还是合理的;或者,如果您知道名称永远不会变大,那么分配一个设置大小的
char[]
会更好吗?
std::string
当然是最简单的选择
Car() : m_name(nullptr), m_carnum(0) {}