[英]Initializing std::unique_ptr with deleter
这是我的代码:
class dummy{
public:
int x;
dummy(int y):x(y){
}
};
const auto& zDeleter = [](dummy * obj){
std::cout<<"this is called"<<std::endl;
delete obj;
};
std::unique_ptr<dummy,decltype(zDeleter)> funct(){
std::unique_ptr<dummy,decltype(zDeleter)> temp(new dummy(10),zDeleter);
return temp;
}
int main(){
std::unique_ptr<dummy,decltype(zDeleter)> get(nullptr,zDeleter);
return 0;
}
我想发生的是使std::unique_ptr<dummy,decltype(zDeleter)> get
初始化并使用它来获取funct()
的返回值。 get = funct();
给我错误。
我试着做std::unique_ptr<dummy,decltype(zDeleter)> get;
但是我得到tuple
“递归必需”错误。 如果我使用std::unique_ptr<dummy,decltype(zDeleter)> get(nullptr,zDeleter);
编译,我不会出错std::unique_ptr<dummy,decltype(zDeleter)> get(nullptr,zDeleter);
但它不会让我收到funct()
的返回值。 奇怪的问题,但我这样做是出于研究目的。
额外的问题:如果我将使用auto&& zDeleter
而不是auto zDeleter
或const auto& zDeleter
怎么会出现长错误?
decltype(zDeleter)
是常量。 std::unique_ptr<dummy,decltype(zDeleter)> get;
因为它是const成员,所以您无法为删除器提供一个值,因此无法使用。
并且因为您的deleter函数具有const修饰符,所以您不能使用赋值。
你为什么不这样做:
std::unique_ptr<dummy,decltype(zDeleter)> get = funct();
或者如果您用std::function<void(dummy*)>
替换delctype(zDeleter)
,它将起作用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.