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::coutdecltype(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我明白了让我试试