Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用deleter初始化std::unique_ptr_C++_C++11 - Fatal编程技术网

C++ 使用deleter初始化std::unique_ptr

C++ 使用deleter初始化std::unique_ptr,c++,c++11,C++,C++11,这是我的密码: 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(){

这是我的密码:

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;   

}
类虚拟{
公众:
int x;
虚拟(整数y):x(y){
}
};
常量auto&zDeleter=[](虚拟*obj){
std::cout
decltype(zDeleter)
是常量。
std::unique\u ptr get;
不起作用,因为您需要为删除程序提供一个值,因为它是常量成员

由于deleter函数有const修饰符,所以不能使用赋值

你为什么不这样做:

std::unique_ptr<dummy,decltype(zDeleter)> get = funct();
std::unique_ptr get=funct();

或者,如果您用
std::function
替换
delctype(zDeleter)
,它将工作

是的,工作正常,但我正在尝试看看是否可以延迟初始化(出于好奇)。因为如果我使用
std::unique_ptr test;
,我就不会出错。我感觉这是因为
decltype
,但我不能正确地对它进行语法分析。那么“它不会让我接收funct()的返回值”是什么意思呢?类似这样的话,让我编辑我的问题。
get=funct();
这是因为
decltype(zDeleter)
是常量类型oooo我明白了让我试试