Not*_*ist 2 c++ pointers const
const一个方法的限定符应该保护数据成员不被错误覆盖.如果你有一个数据成员是一个指针,那么只有指针被保护,指向的值不是.它是C++设计中的一个缺陷还是它有什么基本的东西?
这是一个演示这种情况的代码.在报告不相关的错误和风格问题之前,请考虑其唯一目的是证明上述情况并且简短明了.
#include <cstdio>
#include <cstdlib>
#include <cstring>
class Cat
{
public:
Cat(char const *name)
: _name(strdup(name))
{ }
~Cat(){ free(_name); }
void SetName(char const *name)
{
free(_name);
_name = strdup(name);
}
char const* GetName() const
{
_name[0] = 'P';
return _name;
}
private:
char *_name;
};
int main()
{
Cat c("lost+found");
c.SetName("Molly");
printf("%s\n",c.GetName());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令编译没有警告和错误:
g++ -W -Wall -Wextra -pedantic -Os pmc.cpp -o pmc
Run Code Online (Sandbox Code Playgroud)
结果程序的输出是Polly.
更新使用迂腐char const *而不是传统const char *
这里服务的基本要素只是清晰度.指针是类的成员,它的指针不是:当类也没有自动构造时,它既不会自动被破坏.它可能是一个完全不同的对象,因此当类变为const时,它不一定是const.
你在这里需要像std :: string这样的东西,也就是指针的附加语义 - 例如保证它的内容不会在你的类之外发生变化.