gpt4 book ai didi

c++ - unique_ptr 总是指向同一个内存区域

转载 作者:行者123 更新时间:2023-11-30 01:27:03 24 4
gpt4 key购买 nike

考虑这段代码:

using namespace std;

int* get()
{
unique_ptr<int> p (new int[4]);
return p.get();
}
int main(int argc, char **argv)
{
int *arr1=get();
int* arr2=get();
for(int i=0;i<4;i++)
{
arr1[i]=i;
arr2[i]=i*2;
}
for(int i=0;i<4;i++)
cout << arr1[i];
return 0;
}

arr1 和arr2 指向相同的内存区域。所以他们有相同的值(value)观。我不明白为什么,当我调用 arr2=get() 时:

unique_ptr<int> p (new int[4]);

不应该再次创建这个对象?它没有被删除,因为 arr1 仍然可以访问它。如何得到两个不同内存区域的数组?

最佳答案

我相当确定您正在玩弄不好的未定义行为。

当唯一指针被销毁时,所指向的数据也被销毁,值相同的事实,并且选择了相同的槽是幸运的。

对于指向数组类型的指针,使用 vector

std::vector<int> get()
{
return std::vector<int>(4);
}

int main()
{
std::vector<int> arr1=get();
std::vector<int> arr2=get();
return 0;
}

对于普通的单值指针,您可以返回一个 unique_ptr;

std::unique_ptr<int> get(){
return std::unique_ptr<int>(new int(0));
}
:::
std::unique_ptr<int> ptr=get();

关于c++ - unique_ptr 总是指向同一个内存区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415827/

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