使用std::unique_ptr报错:memory:error invalid application of 'sizeof' to incomplete type '***' 排查后,不使用std::unique_ptr就ok。 使用的std::unique_ptr包装的类型是在第三方库,看不到具体结构和实现,使用前置声明来包含使用的。 纠其原因,从报错可以看出: std::unique_ptr中需要静态检测类型的大小st...
// HeartclassHeart;// HumanclassHuman{...private:// 如果不指定删除器, 编译器会报错std::unique_ptr<Heart>heart_;}; unique_ptr 是模板类, 默认的删除器需要通过 sizeof 获取泛型数据类型的字节大小. 为了减少麻烦, 如果有比较多的习惯使用 unique_ptr, 那么就减少前置声明的使用 ...
std::unique_ptr<CarImp>carimp_; }; car.cc #include"car.h" #include"car_imp.h" Car::Car:carimp_(std::make_unique<CarImp>){} 与上节的例子相比,carimp_仍然作为Car类的私有成员变量,与之前不同的是,这本例中其类型为std::unique_ptr,且增加了CarImp类的前置声明,表明该文件中未提供CarImp...
ExprNeg,ExprAdd,ExprMul>;structExprNeg{std::unique_ptr<Expr>sub;};structExprAdd{std::unique_ptr<Expr>l,r;};structExprMul{std::unique_ptr<Expr>l,r;};
使用std::unique_ptr报错:memory:error invalid application of 'sizeof' to incomplete type '***' 排查后,不使用std::unique_ptr就ok。 使用的std::unique_ptr包装的类型是在第三方库,看不到具体结构和实现,使用前置声明来包含使用的。 纠其原因,从报错可以看出: ...
std::unique_ptr<CarImp>carimp_; }; car.cc #include"car.h" #include"car_imp.h" Car::Car:carimp_(std::make_unique<CarImp>){} 与上节的例子相比,carimp_仍然作为Car类的私有成员变量,与之前不同的是,这本例中其类型为std::unique_ptr,且增加了CarImp类的前置声明,表明该文件中未提供CarImp...
与上节的例子相比,carimp_仍然作为Car类的私有成员变量,与之前不同的是,这本例中其类型为std::unique_ptr,且增加了CarImp类的前置声明,表明该文件中未提供CarImp类的完整定义。 其次,本例中,头文件car.h和car_imp.h被移到了car.cc中。 好了,不妨使用如上代码: ...