gpt4 book ai didi

c++ - 为什么取消引用 unique_ptr 不会修改原始对象

转载 作者:太空狗 更新时间:2023-10-29 19:57:13 26 4
gpt4 key购买 nike

看下面的例子,我使用了一个唯一指针和一个指向a的原始指针,我的问题是,为什么原始指针有效但唯一指针无效?如果我想通过unique_ptrshared_ptr像引用一样修改字符串a,我应该怎么做?

示例程序:

#include <iostream>
#include <string>
#include <memory>

int main()
{
using namespace std;
string a = "aaa";
auto ptr = std::make_unique<string>(a);
auto ptr2 = &a;
cout << "before, a: " << a << endl;
*ptr += "bbb";
cout << "After, a: " << a << endl;
*ptr2 += "ccc";
cout << "after 2, a: " << a << endl;
}

输出:

before, a: aaa
After, a: aaa
after 2, a: aaaccc

最佳答案

std::make_unique<string>(a);new一个全新的std::string (从 a 初始化),由 ptr 指向之后。所以对象被修改为*ptr += "bbb" , 但它与原始对象无关 a .

您可以确认 unique_ptr 指向的对象修改,通过以下演示:

string* pa = new string("aaa");
unique_ptr<string> ptr(pa);
auto ptr2 = pa;
cout << "before, *pa: " << *pa << endl;
*ptr += "bbb";
cout << "After, *pa: " << *pa << endl;
*ptr2 += "ccc";
cout << "after 2, *pa: " << *pa << endl;

结果:

before, *pa: aaa
After, *pa: aaabbb
after 2, *pa: aaabbbccc

LIVE

关于c++ - 为什么取消引用 unique_ptr 不会修改原始对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39485831/

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