【发布时间】:2020-07-29 07:56:38
【问题描述】:
我有以下简单的代码
class Hybrid{
std::unique_ptr<Bcf> bndfac;
void constructbndFace( const int &nn){
bndfac( new Bcf(nn) ); // Does not work (A)
//std::unique_ptr<Bcf> bndfac( new Bcf(nn) ); // WORKS (B)
}
}
class Bcf{
Bcf(const int nn_) : nn(nn_){}
private:
int nn;
}
当我尝试调用Hybrid::constructbndFace 时,我不明白为什么编译器会抱怨std::unique_ptr< Bcf >' does not provide a call operator。如果我使用注释行 (B),编译器将不再抱怨。
我的问题是,如果我使用 (B) 行,实例化的对象会通过我在 Hybrid 类中的声明来访问,还是我做错了什么Hybrid->bndFace
【问题讨论】:
-
bndfac( new Bcf(nn) );->bndfac = std::make_unique<Bcf>(nn); -
bndfac(...)在{ }内部应该是什么意思?您的意思是把它放到initializer list 中吗? -
不,我不是故意的,因为在我初始化 Hybrid 时,我不知道整数
nn。因此,我在 Hybrid 中创建了一个成员函数来构造 Bcf。实际上 Hybrid 有更多的东西,但我已经将其浓缩为实际问题
标签: c++ class smart-pointers