显然,仍允许const成员函数更改类成员指向的数据.这是我的意思的一个例子:
class MyClass
{
public:
MyClass();
int getSomething() const;
private:
int* data;
};
// ... data = new int[10];, or whatever
int MyClass::getSomething() const
{
data[4] = 3; // this is allowed, even those the function is const
return data[4];
}
Run Code Online (Sandbox Code Playgroud)
如果不允许这样做,我更愿意.我应该如何定义"数据",以便"getSomething()const"不允许更改它?(但是允许非const函数改变它.)是否有某种"最佳实践"?也许std :: vector?
在一个const成员函数的类型,data从改变int*到int *const:
int * const data;
Run Code Online (Sandbox Code Playgroud)
这意味着,它是constconst成员函数中的指针,而不是指针指向的数据本身.所以你不能做到以下几点:
data = new int[100]; //error
Run Code Online (Sandbox Code Playgroud)
因为它试图改变指针本身是const,因此不允许,但允许以下内容:
data[0] = 100; //ok
Run Code Online (Sandbox Code Playgroud)
因为更改内容不会更改指针.data指向相同的内存位置.
如果你使用std::vector<int>,那么你可以实现你想要的.事实上,vector解决了这个问题,连同内存管理问题,因此使用它:
class MyClass
{
public:
MyClass();
int getSomething() const;
private:
std::vector<int> data;
};
MyClass::MyClass() : data(10) {} //vector of size 10
int MyClass::getSomething() const
{
data[4] = 3; // compilation error - this is what you wanted.
return data[4];
}
Run Code Online (Sandbox Code Playgroud)
尽可能避免非RAII设计.RAII是内存管理问题的优秀解决方案.在这里,通过它,您可以实现您想要的.读这个:
| 归档时间: |
|
| 查看次数: |
1300 次 |
| 最近记录: |