#include <memory>
int main()
{
std::shared_ptr<double> array (new double [256], [](double * d){
delete [] d;
});
}
我做了一个shared_ptr
指向一个双打数组,它有自己的自定义删除器。
现在我该如何访问数组?假设我希望在索引1
访问该数组。我尝试了通常的“括号方法”,但是我收到了错误。
默认情况下,单词array
指向其第一个元素,但如果我想访问第二个元素该怎么办?使用增量和括号使我“错误的操作员”错误。
有人可以向我解释一下发生了什么事吗?
我问这个用于研究目的,尽管我知道unique_ptr
和vector
会做得更好。
答案 0 :(得分:10)
括号表示法被定义为使用指针类型(并且你是正确的,给定数组array
,表达式array
衰减到具有指向第一个元素的类型的表达式)但是,尽管有其功能, std::shared_ptr
不是指针类型。
您必须obtain the raw pointer first:
array.get()[n];
其中n
当然是有效的数组下标。
std::unique_ptr
也是如此(虽然请注意,in that case, you do not need to supply your own deleter!)。
答案 1 :(得分:0)
在C ++ 17中,像在unique_ptr(c ++ 11)中一样,支持shared_ptr数组。
int main()
{
std::shared_ptr<double[]> array1 (new double [3]{4,5,6}, [](double * d){
delete [] d;});
std::unique_ptr<double[]> array2 (new double [3]{4,5,6}, [](double * d){
delete [] d });
}