Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何保护指针';类外的用户可以修改的地址?c++;_C++_Multithreading_Pointers_Locking - Fatal编程技术网

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限定变量变量,但指向该变量的指针。