这只是为了学习目的,我知道我可以使用矢量,但我有
const int N = 1e3;
auto my_arr = std::make_unique<std::array<int, N>>();
// To access it I have to do this - why [0][0] twice?
my_arr.get()[0][0] = 1;
// Getting the size for fun
std::cout << sizeof(my_arr.get()) << "\n"; // outputs 8
std::cout << sizeof(my_arr.get()[0]) << "\n"; // outputs 800000000
std::cout << sizeof(my_arr.get()[0][0]) << "\n"; // outputs 8
Run Code Online (Sandbox Code Playgroud)
我知道.get()返回一个指向托管对象的指针,但我不明白为什么我需要做my_arr.get()[0][0]两次?
my_arr.get()给你一个std::array<int, N>*.因为你有一个指针做的pointer[0]是相同的*pointer.所以你实际上并不需要my_arr.get()[0][0],你可以改用
(*my_arr.get())[0]
Run Code Online (Sandbox Code Playgroud)
表明您正在取消引用指针.事实上,你可以使用
(*my_arr)[0]
Run Code Online (Sandbox Code Playgroud)
因为它operator *被重载了std::unique_ptr,它将返回对指向的东西的引用.
好吧,您不必这样做,但它确实有效。
my_arr.get() 返回一个 std::array<int,N>*
像任何指针一样,您可以像数组一样索引它。
my_arr.get()[0] 返回对数组“数组”中第一个元素的引用。
然后,您可以使用std::array的索引运算符来获取元素。
my_arr.get()[0][0] 返回对所需元素的引用。
或者,你可以写:
my_arr->at(0)
my_arr->operator[](0)
(*my_arr)[0]
*my_arr->data()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |