gpt4 book ai didi

C++11 的 shared_ptr 赋值

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

我有以下代码:

    #include <memory>

int main(void)
{
std::shared_ptr<int> currInt(nullptr);

std::shared_ptr<int> newInt(new int);
currInt = newInt;

return 0;
}

事实证明,这不是有效的 C++11(它曾经在草稿版本中)并且赋值构造函数现在使用移动语义。我不明白的东西。

有人可以解释一下我将如何修改上面的代码以使其......工作吗?

最佳答案

shared_ptr 有一个复制构造函数,否则 shared_ptr 有什么意义?

clang link OP 的意思是如果只定义了移动赋值运算符,那么复制构造函数将被隐式删除,使 shared_ptr 无法正常运行。这可以在 Boost changeset 中看到同样,复制赋值运算符被显式添加以纠正错误。

您可以在§20.7.2.2.3[util.smartptr.shared.assign]/1–3 中找到 shared_ptr 的复制赋值运算符。

shared_ptr& operator=(const shared_ptr& r) noexcept;
template<class Y> shared_ptr& operator=(const shared_ptr<Y>& r) noexcept;
template<class Y> shared_ptr& operator=(auto_ptr<Y>&& r);

关于C++11 的 shared_ptr 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8442482/

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