我一直在阅读Scott Meyer的《Effective c++ "》中的智能指针部分。和"更有效的c++";其中,有一个auto_ptr
的实现,其构造函数如下所示:
template<class T>
class auto_ptr{
private:
T* pointee;
public:
auto_ptr<T>(T* p) : pointee(p) {}
// ... rest of class
我的问题是:为什么构造函数中的指针不通过const引用传递?p
在构造函数中没有改变,因此const
看起来很好,并且通过引用传递我们避免了任何复制。没有给出任何解释。
我也知道auto_ptr
已被弃用,但a)问题仍然存在,b)我认为人们看到同样的事情,例如std::shared_ptr
重要通知:std::auto_ptr
已在c++ 11中弃用,并已在c++ 17中从语言中删除。不应在新代码中使用。
为什么构造函数中的指针没有通过const引用传递?
因为指向对象的指针是小对象,复制引用的成本也同样昂贵,而且与复制指针相比,增加的间接操作的成本可能更高。