gpt4 book ai didi

c++ - 具有显式构造函数的智能指针让我出错

转载 作者:行者123 更新时间:2023-11-30 05:13:48 24 4
gpt4 key购买 nike

我正在尝试构建我自己的智能指针,它允许我像这样声明它:

SmartPtr<MyClass> ptr = new MyClass;

我希望构造函数是显式的,所以我这样做了:

template<class T>
class SmartPtr
{
public:
SmartPtr();
explicit SmartPtr(T* _ptr);
explicit SmartPtr(const SmartPtr& other);
}

但是,当我尝试按照上面提到的方式声明它时,出现以下错误:

error: conversion from ‘MyClass*’ to non-scalar type ‘SmartPtr<MyClass>’ requested

我知道错误是因为复制 CTOR 具有带“=”的特殊语法,并且无法在该方法中声明转换 CTOR。我的问题是,有没有什么方法可以保留我上面提到的所需语法,并有一个明确的 CTOR?

最佳答案

My question is, is there any method to keep the required syntax I mentioned above, and have an explicit CTOR?

可能不会。该语法是 copy initialization并且它需要一个非显式构造函数。

请注意,复制构造函数不需要是显式的。如果它是显式的,那么您将无法通过 SmartPtr到按值接受它的函数。


另一种以最小语法开销构造指针的方法是添加工厂函数并像这样使用它:

template<class T> 
SmartPtr<T> make_ptr(T* p) {
return SmartPtr<T>{p};
}

auto ptr = make_ptr(new MyClass);

或者,类似于 std::make_shared<> 的东西:

auto ptr = make_ptr<MyClass>();

关于c++ - 具有显式构造函数的智能指针让我出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43753268/

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