gpt4 book ai didi

c++ - 为什么访问 boost::ptr_vector 的元素会尝试实例化新对象?

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:15 25 4
gpt4 key购买 nike

我已经更改了我的代码,不再使用

std::vector<A*> 

使用

boost::ptr_vector<A> 

遇到了问题。

代码如下:

class A
{
protected:
virtual int getNumber() {return 1;};

public:

static int getSum( boost::ptr_vector<A> &pv){
int sum = 0;
for(std::vector<int>::size_type i = 0; i != pv.size(); i++) {
sum += pv[i].getNumber();
}
return sum;
}

virtual ~A(void)=0;
}

现在,由于更改为 ptr_vector,我得到一个编译器错误:

error C2259: 'A' : cannot instantiate abstract class
due to following members:
'A::~A(void)' : is abstract

在线

sum += pv[1].getNumber();

这是我第一次使用 ptr_vector,所以如果我遗漏了一些明显的东西,请原谅我,但它为什么要尝试实例化,如何避免呢?

最佳答案

您不能为类使用纯虚拟且未定义的析构函数,如果您想以多态方式使用它。 ptr_vector 应该清理它的内容(默认策略是调用指针上的 delete,调用对象的析构函数,所以应该定义析构函数)。

尝试在类声明之后(或在 cpp 文件中)定义它

A::~A() {}

n3376 12.4/9

A destructor can be declared virtual (10.3) or pure virtual (10.4); if any objects of that class or any derived class are created in the program, the destructor shall be defined.

关于c++ - 为什么访问 boost::ptr_vector 的元素会尝试实例化新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23779273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com