0
我很久没有使用这个C++特性,所以只是忘记了它。假设我有一个名为“object”的类,以及一个从“object”公开派生的类“button”。将派生类对象添加到C++中的bas类对象的向量中?
现在,考虑我有一个向量a,或者一个hash_map a。我将能够添加一个类型的对象。?:对象‘我怎样才能做到这一点
感谢
我很久没有使用这个C++特性,所以只是忘记了它。假设我有一个名为“object”的类,以及一个从“object”公开派生的类“button”。将派生类对象添加到C++中的bas类对象的向量中?
现在,考虑我有一个向量a,或者一个hash_map a。我将能够添加一个类型的对象。?:对象‘我怎样才能做到这一点
感谢
使用指针的向量“按钮?在其上或事实上任何其他类对象公开源自’:
struct Base
{
virtual ~Base() {}
virtual int foo() = 0; // good manners: non-leaf classes are abstract
};
struct Derived1 : Base { /* ... */ };
struct Derived2 : Base { /* ... */ };
struct Derived3 : Base { /* ... */ };
#include <vector>
#include <memory>
int main()
{
std::vector<std::unique_ptr<Base>> v;
v.emplace_back(new Derived3);
v.emplace_back(new Derived1);
v.emplace_back(new Derived2);
return v[0]->foo() + v[1]->foo() + v[2]->foo(); // all highly leak-free
}
确实'emplace_back'有超过'这里push_back' –
@MattPhillips任何优势:进驻是明确的转换,这在这里需要一个半更好的解决方案将涉及'make_unique',不幸的是没有。 –
对于'Derived *'显式转换为'std :: unique_ptr '?你能解释'T &&''和'T&'是否有区别,或者提供链接? –