小编use*_*226的帖子

int,int*和int []与std :: unique_ptr之间的差异

既然你可以做到std::unique_ptr<int> upi{new int},我立即对如何为什么std::unique_ptr<int*> upi{new int[42]{}}不起作用感到困惑.有人可以解释以下片段之间的区别吗?

{
    std::unique_ptr<int> upi{new int[42]{}};
    upi.get()[0];
}

// Doesn't work
{
    std::unique_ptr<int> upi{new int[42]{}};
    upi[0];
}

{
    std::unique_ptr<int[]> upi{new int[42]{}};
    upi.get()[0];
}    

{
    std::unique_ptr<int[]> upi{new int[42]{}};
    upi[0];
}     

// Doesn't work
{
    std::unique_ptr<int*> upi{new int[42]{}};
    upi.get()[0];
}      

// Doesn't work    
{
    std::unique_ptr<int*> upi{new int[42]{}};
    upi[0];
}
Run Code Online (Sandbox Code Playgroud)

编译器错误:

prog.cpp: In function ‘int main()’:
prog.cpp:8:20: warning: value computed is not used [-Wunused-value]
         upi.get()[0];
                    ^
prog.cpp:14:12: error: no match for ‘operator[]’ (operand types are ‘std::unique_ptr<int>’ …
Run Code Online (Sandbox Code Playgroud)

c++ pointers unique-ptr c++11

-2
推荐指数
1
解决办法
2125
查看次数

标签 统计

c++ ×1

c++11 ×1

pointers ×1

unique-ptr ×1