gpt4 book ai didi

c++ - 在 C++ 中使用双指针声明原子的动态数组是否正确?

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

我需要创建一个原子整数数组,即 n 个整数,每个整数都是原子的。我发现 std::vector<std::atomic<int>>将不起作用,但后来我尝试了以下方法并使用 clang 成功编译。

int n;
std::cin >> n;
std::atomic<int> **a;
a = new std::atomic<int>* [n];
for(int i = 0; i < n; i++)
{
a[i] = new std::atomic<int>();
}

我不确定这样做是否正确,是吗?此外,是否有任何方法可以验证是否所有 a[i][0]在这里将是原子的(除了用多线程检查它)?

最佳答案

您的代码是正确的(除了资源泄漏,我假设为简洁起见省略了销毁数组),但很复杂。首先,为什么要使用“双指针”或指向指针的指针?为什么不是这个:

std::atomic<int> * a1 = new std::atomic<int>[ n ];

如果这对你有用,那么

std::vector<std::atomic<int>> a2( n );

也应该工作,有一些区别,但最重要的可能是如果你按值传递 a1,内容不会被复制,但如果你传递 a2 按值,它们是。

这对您来说可能是个问题,因为 std::atomic 不可复制。所以你应该总是通过引用传递a2,除非你需要转移所有权;在那种情况下使用 std::move 和右值引用。您不能按值传递 a2

关于c++ - 在 C++ 中使用双指针声明原子的动态数组是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40672229/

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