【发布时间】:2020-01-01 22:33:34
【问题描述】:
我正在使用一些包含以下运算符的智能指针实现:
template<class T>
class my_unique_ptr {
public:
...
operator T() {
return _t;
}
T *operator &() {
return &_t;
}
private:
T _t;
};
我希望从由指针类包装的类型 T 中获取原始值。
& 运算符工作正常,但它给出了我的指针而不是值本身。
因此,我希望调用T() 运算符(就像std::unique_ptr 中的get())
我尝试直接使用该变量,但它将其称为my_unique_ptr<T> 而不是T。
void func(myClass c);
int main()
{
my_unique_ptr<myClass> x = new myClass(..);
func(x);
}
但我收到无法从类型“my_unique_ptr”转换为指针类型“myClass”的错误
我怎么称呼这个运营商?
【问题讨论】:
-
operator->可能是你想要的 -
或
operator*。 -
和
T* _t;如果它应该存储一个指针。 -
您可以像这样调用 () 运算符:
x();。代码没有多大意义。_t不是指针,运算符 () 按值返回副本。而且由于您没有显示构造函数或赋值,这使它成为一个糟糕的问题,因为我们无法编译它并且无法猜测您编写的内容,因为我们所拥有的内容不连贯。如果您想学习如何编写唯一指针,请查看std::unique_prt代码。
标签: c++ templates smart-pointers