我正在阅读C ++ STL中auto_ptr的实现。
我看到指针上常用的操作,比如 - >和*重载,以便它们保持相同的含义。但是,指针算法会在自动指针上工作吗?
假设我有一个自动指针数组,我希望能够执行类似于数组+ 1的操作并希望获得数组的第二个元素的地址。我怎么得到它?
我对此要求没有任何实际应用,只是出于好奇而提出。
答案 0 :(得分:10)
auto_ptr只能指向一个元素,因为它使用delete
(而不是delete[]
)来删除它的指针。
所以这里没有指针运算。
如果你需要一个对象数组,通常建议使用std :: vector。
答案 1 :(得分:1)
您需要在此处查看 auto_ptr 的文档。
没有为auto_ptr
定义指针算法。
auto_ptr<int> p1(new int(1));
*p2 = 5; // Ok
++p2; // Error, no pointer arithmetic
答案 2 :(得分:1)
这实际上与指针算术无关。
// applies as well with soon-to-be-deprecated std::auto_ptr
typedef std::unique_ptr<T> smart_ptr;
smart_ptr array[42];
// access second element
array[1];
// take address of second pointer
&array[1];
// take address of second pointee
array[1].get();
答案 3 :(得分:1)
向下推进一个对象数组的指针仍然可以正常工作。这是一个example:
#include <memory>
#include <iostream>
int main()
{
std::auto_ptr<int> foo[3];
foo[0] = std::auto_ptr<int>( new int(1) );
foo[1] = std::auto_ptr<int>( new int(2) );
foo[2] = std::auto_ptr<int>( new int(3) );
std::auto_ptr<int> *p = &foo[0];
std::cout << **p << std::endl;
std::cout << **(p + 1) << std::endl;
}
输出:
1
2