这是我的代码:
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);编译,我不会出错,但它不会让我收到funct()的返回值。奇怪的问题,但我这样做是为了研究目的。
附加问题:如果我将使用auto&& zDeleter而不是auto zDeleter或const auto& zDeleter,为什么会产生长错误?
发布于 2015-06-22 05:34:02
decltype(zDeleter)是const.std::unique_ptr<dummy,decltype(zDeleter)> get;不能工作,因为您需要为删除器提供一个值,因为它是const成员。
因为删除函数有const修饰符,所以不能使用赋值。
你为什么不这样做呢
std::unique_ptr<dummy,decltype(zDeleter)> get = funct();或者,如果您用delctype(zDeleter)替换为std::function<void(dummy*)>,它将工作。
https://stackoverflow.com/questions/30972516
复制相似问题