C++ 如何保护指针';类外的用户可以修改的地址?c++;
我有一个缓冲区,将发送指针直接读取数据进行零拷贝。但是如何保护地址指针不受类外代码的影响C++ 如何保护指针';类外的用户可以修改的地址?c++;,c++,multithreading,pointers,locking,C++,Multithreading,Pointers,Locking,我有一个缓冲区,将发送指针直接读取数据进行零拷贝。但是如何保护地址指针不受类外代码的影响 const void * returnReadPointer(size_t arraySize) { if ( arraySize < MemoryUsageInArray) {return array + arrayIndex} else{ return null} } const void*returnReadPointer(大小\u t数组化) {
const void * returnReadPointer(size_t arraySize)
{
if ( arraySize < MemoryUsageInArray)
{return array + arrayIndex}
else{ return null}
}
const void*returnReadPointer(大小\u t数组化)
{
if(数组化
返回指针可以访问作为缓冲区的数组。我想尽力保护它不被不当使用 将返回值设为
const void*
const void * returnReadPointer(size_t arraySize)
您可以如下更改函数原型,以保护指针不被更改
const void*const returnReadPointer(size\t arraySize)
如果您将内存位置的地址交给客户端,客户端可以对其执行任何操作。更改API,而不是返回地址,只提供他们需要的功能:
<your_type> readValue(size_t index)
{
// index validation etc.
.
.
return array[index];
}
readValue(大小索引)
{
//索引验证等。
.
.
返回数组[索引];
}
您能更清楚地说明您想问什么吗?也发布你的代码,这样每个人都可以查看它。你说零拷贝是什么意思?我发布了一篇小文章。该函数可以直接访问读取指针。零拷贝意味着使用缓冲区外数据的函数将直接从数组中读取,而无需复制到其他位置。也就是说,我们不会复制到新值并删除数据。如果我们循环,数据将被覆盖。不确定“不当使用”是什么意思。您可以使用智能指针,特别是std::unique_ptr
,以确保只有一个所有者在管理指针。我尝试过这样做,但有人说我仍然需要保护指针指向的地址。一个const
限定变量可以分配给一个非const
变量,而这实际上没有任何作用。这不是一个const限定变量变量,但指向该变量的指针。