我是C++的新手,经过大量阅读有关移动语义、唯一指针(和初始化列表)的知识后,我明白了为什么这段代码行不通(抛出“试图引用已删除函数”的错误):
term_array::term_array(std::unique_ptr<term>&& opd)
: term(std::vector<std::unique_ptr<term>> {std::move(opd)}) {...}
这是一个构造函数,旨在从派生类
term_array
传递一个指向term
对象的指针opd
到基类term
中,其中term
构造函数需要一个指针向量。因此,我尝试即时创建一个std::vector<std::unique_ptr<term>>
并用从term_array
构造函数接收的一个opd
指针填充它。显然,这不起作用,因为unique_ptr
无法被复制,并且initializer_list
初始化不允许移动操作。
我在this question中看到如何在常规程序流中“列出移动类型的向量”。但是,在简单的构造函数调用内是否可以完成这个操作?还是我完全偏离了轨道?
term
应该是一个操作的抽象基类,保存操作数(terms 本身)的向量,因此使用了 unique_ptr 向量。派生类应该实现加、减、乘等实际的各种行为。这种方法是否不好? - Duke