【发布时间】:2013-06-01 20:24:01
【问题描述】:
我有一个对数据缓冲区有私有 unsigned char * 的类。数据缓冲区可以是可变长度的,所以我使用 malloc() 和 free() 来分配我需要保存数据的内存量。
我的问题是我有另一个类需要访问这些数据。我目前这样做的方式是创建缓冲区的工作副本并将其传递给另一个类。也就是说,我有一个函数 get_data(unsigned char * copy, int size) 将 size 字节复制到 copy 指定的缓冲区中。缓冲区很小(约 50 字节),但我必须在我的程序过程中执行此操作。因此,我正在寻找一种可以使这更加简化的方法。
有没有办法可以将数据缓冲区指针传递给任何其他类?他们能覆盖缓冲区中的数据吗?我知道我可以发回数据缓冲区指针的 const 副本,但是调用者可以调用 const_cast 并随意修改它。也就是说,他们可以调用 const_cast,然后调用 buf_ptr[2] = 0xFF;
提前感谢您的帮助。我希望有一种方法可以让我使用指针,而不需要调用者在他们做坏事时破坏数据。
【问题讨论】:
-
如果有人在使用 const_cast,他们面临的问题比可能修改数组中的某些值要大得多。
-
const_cast 几乎不应该使用,除非您将结果传递给不修改内容的函数。如果程序员 const_char 你的缓冲区,那么他不应该对崩溃的东西感到惊讶。除非您有安全问题,否则我会选择共享 const unsigned char *
-
感谢您对 const_cast 的所有保证。我基本上是从代码审查/魔鬼拥护者的角度来看这个。