gpt4 book ai didi

C++ const 方法返回非 const 指针

转载 作者:行者123 更新时间:2023-12-02 09:52:41 26 4
gpt4 key购买 nike

作为学习 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 类的非常量实例,但我会对有关这种方法有效性的评论感兴趣。

最佳答案

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

  • 在公共(public)接口(interface)中使用正确的常量并转换为内部所需的常量(如果确实需要)
  • 如果更有用的话,另外制作 C++ 接口(interface)
  • 关于C++ const 方法返回非 const 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63182359/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com