首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用删除器初始化std::unique_ptr

用删除器初始化std::unique_ptr
EN

Stack Overflow用户
提问于 2015-06-22 05:15:44
回答 1查看 307关注 0票数 1

这是我的代码:

代码语言:javascript
复制
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 zDeleterconst auto& zDeleter,为什么会产生长错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-22 05:34:02

decltype(zDeleter)是const.std::unique_ptr<dummy,decltype(zDeleter)> get;不能工作,因为您需要为删除器提供一个值,因为它是const成员。

因为删除函数有const修饰符,所以不能使用赋值。

你为什么不这样做呢

代码语言:javascript
复制
std::unique_ptr<dummy,decltype(zDeleter)> get = funct();

或者,如果您用delctype(zDeleter)替换为std::function<void(dummy*)>,它将工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30972516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档