【发布时间】:2015-10-07 10:49:18
【问题描述】:
我创建了一个抽象类,然后创建了继承这个抽象类的子类。
class A{
public:
virtual A* clone() const = 0;
virtual A* create() const = 0;
~virtual A(){};
// etc.
};
子类
class B: public A{};
class C: public A{};
然后我在主函数中使用子类指针到基类指针的隐式转换。
int main(){
B* pB = new B();
C* pC = new C();
A* pA = pB; //converting a pointer to A, to a pointer to B
A* pAA = pC; //converting a pointer to A, to a pointer to C
我现在可以使用 A 类型的指针用这些类填充向量,并通过多态性访问子类。
vector<A*> Pntr;
但是,我希望每个子类负责自己的内存释放。我知道我可以为此使用唯一指针。问题是我该如何实现。
如果我这样编码:
pA = unique_ptr<A>(pB);
pAA = unique_ptr<A>(pC);
然后我像这样填充向量:
vector<unique_ptr<A>>Pointers;
Pointers.push_back(move(pA));
Pointers.push_back(move(pAA));
不确定这是否可行。而且我也很困惑,当向量超出范围时实际上会被销毁。转换后的指针 pA 和 pAA 会被简单地设置为 NULL 还是类对象会被销毁——这是我的初衷。需要一些澄清。
【问题讨论】:
标签: c++ c++11 vector unique-ptr