在smart_ptr构造函数中,为什么通过值传递而不是通过const ref传递?



我一直在阅读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引用传递?

因为指向对象的指针是小对象,复制引用的成本也同样昂贵,而且与复制指针相比,增加的间接操作的成本可能更高。

最新更新