unique_ptr看不到派生类的自定义构造函数
unique_ptr does not see custom constructor for derived class
class A{
string m_name;
int m_num;
public:
A(string name="", int number=0) : m_name(name), m_num(number)
{ cout << "ctorA " << m_name << endl; }
virtual ~A(){ cout << "dtorA " << m_name << endl; }
string getName(){ return m_name; }
void setName(const string name){ m_name = name; }
int getNumber(){ return m_num; }
};
class B : public A{
string m_s;
public:
B(string name="", int number=0, string s="")
: A(name, number){ m_s = s; }
string getS(){ return m_s; }
};
auto upB = unique_ptr<B>("B", 2, "B"); //ERROR HERE
error: no matching function for call to 'std::unique_ptr<B>::unique_ptr(const char [2], int, const char [2])'
我不明白为什么它看不到 B 构造函数。对我来说,一切似乎都很好。 与默认构造函数一起工作,如下所示:
auto upB = unique_ptr<B>();
我做错了什么还是派生类存在一些特殊问题?
auto upB = std::make_unique<B>("B", 2, "B");
或
auto upB = std::unique_ptr<B>(new B("B", 2, "B"));
在空std::unique_ptr<B>
下面创建,就像nullptr
.
auto upB = unique_ptr<B>();
我不明白为什么它看不到 B 构造函数。
请注意,unique_ptr<B>("B", 2, "B");
不是试图调用B
的构造函数,而是std::unique_ptr
的构造函数。std::unique_ptr
没有这样的构造函数,则编译失败。
我想你想要
auto upB = unique_ptr<B>(new B("B", 2, "B"));
即传递一个类型为B*
的指针来构造一个unique_ptr<B>
;你也可以使用std::make_unique
,它将参数转发给B
的构造函数来构造一个类型B
的对象并将其包装在std::unique_ptr
中。
auto upB = make_unique<B>("B", 2, "B");
关于auto upB = unique_ptr<B>();
,你正在构造一个通过std::unique_ptr
的默认构造函数不拥有任何东西的std::unique_ptr
。
相关文章:
- C++自定义比较函数
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- primr 5版.自定义deleter函数的unique_ptr构造函数
- 在自定义构造函数中的堆上创建指针
- unique_ptr看不到派生类的自定义构造函数
- 将从基类继承的构造函数与自定义构造函数混合使用
- C 需要使用自定义构造函数的帮助
- 如何在SWIG中释放自定义构造函数中分配的内存
- 使用自定义构造函数作为模板函数
- 具有元素自定义构造函数的对象数组/向量
- boost-python:如何提供自定义构造函数包装器函数
- 为什么只有在声明了自定义构造函数时,基类析构函数才能访问
- 用自定义构造函数初始化c++类的实例作为Objective C类成员
- 在另一个类中使用自定义构造函数声明一个类
- c++初学者:调用默认构造函数vs自定义构造函数
- 如何转发声明自定义构造函数
- 如何在另一个类中调用自定义构造函数
- 如何返回使用自定义构造函数的指针
- 构造函数继承和自定义构造函数