gpt4 book ai didi

c++ - 在 std::auto_ptr 的构造函数中使用 `explicit` 关键字有什么原因吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:50 25 4
gpt4 key购买 nike

这是用于在 VS2008 编译器中从标准指针构造 std::auto_ptr 对象的构造函数。

template<class _Ty>
class auto_ptr
{
public:
explicit auto_ptr(_Ty *_Ptr = 0) _THROW0() : _Myptr(_Ptr) {}

private:
_Ty *_Myptr;
};

explicit 是否有任何特殊原因?上面使用关键字 ?

换句话说,为什么我不能初始化 auto_ptr

std::auto_ptr<Class A> ptr = new Class A;

最佳答案

因为否则您可能会无意中执行以下操作:

void foo(std::auto_ptr<int> p)
{
}

void boo()
{
int* p = new int();
foo(p);
delete p; // oops a bug, p was implicitly converted into auto_ptr and deleted in foo.... confusing
}

与您实际清楚地意识到正在发生的事情相比:

void boo()
{
int* p = new int();
foo(std::auto_ptr<int>(p)); // aha, p will be destroyed once foo is done.
}

关于c++ - 在 std::auto_ptr 的构造函数中使用 `explicit` 关键字有什么原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8167368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com