首页 > 解决方案 > C++ const 方法返回非 const 指针

问题描述

作为学习 C++ 的练习,我创建了以下封装类,它封装了一个简单字符缓冲区的创建/销毁:

class BufferClass {
  private:
    char *mBufferPtr;
    
  public:
    BufferClass(int pSize)
      : mBufferPtr(new char[pSize]) {}
    
    virtual ~BufferClass() {
      delete[] mBufferPtr;
    }
    
    operator char*() {
      return mBufferPtr;
    }
    
    operator const char*() const {
      return mBufferPtr;
    }
};

如果在某种情况下我想创建此类的 const 实例(即我无意在构造后修改对象),但必须将它与仅接受非 const char* 指针的 C API 结合使用(甚至认为它不会改变数据),允许以下内容的普遍共识是什么:

operator char*() const {
  return mBufferPtr;
}

我意识到我可以只创建 Buffer 类的非常量实例,但我会对有关这种方法有效性的评论感兴趣。

标签: c++

解决方案


你应该正确地设计你的课程。所以,如果这是一个const成员函数,那么它不应该允许以任何方式修改对象的数据。与 C API 的兼容性不是此类的责任,因此如果需要(const_cast'ing、复制到另一个缓冲区等),应该在外部解决它。

此外,您可能还可以为该 C API 编写一些包装器:

  • 在公共接口中使用正确的常量并转换为内部所需的常量(如果确实需要)
  • 另外制作 C++ 接口,如果它更有用的话

推荐阅读