【发布时间】:2016-02-19 02:17:47
【问题描述】:
为冗长的标题道歉。我不知道如何简洁地表达这一点。
class A
{
bool a1;
unsigned int a2 ;
virtual bool aFn1(unsigned int t_) = 0 ;
virtual void aFn2(unsigned int t_, bool val_) = 0 ;
A()
{
a1 = false ; a2 = 0 ;
};
}
下一个:
#include <bitset>
#define MAX_SIZE 500
class B : public class A
{
private:
std::bitset<MAX_SIZE> _bmem;
public:
B() : A() {};
using A::aFn1 ;
virtual bool aFn1(unsigned int t_)
{
return _bemem[t_]
}
using A::aFn2;
virtual void aFn2(unsigned int t_, bool val_)
{
_bemem[t_] = val_ ;
}
}
下一个:
#include "A.h"
#include "B.h"
std::vector<A*> * vecA;
vecA = new std::vector<B*> ;
但这最后一步不起作用。铿锵完整告诉我
从不兼容的类型
std::vector<B*>分配给std::vector<A*> *
但是由于B 派生自A,这应该是可能的吧?我见过人们使用的例子
B bObj;
A *aObj = &bObj ;
那么你能告诉我我犯了什么错误吗?
我之所以经历这一切,是因为我有class C 和class D,和class B 完全一样,唯一的区别是#define MAX_SIZE 不同。
我这样做是因为,我需要一个不同大小的bitset,以便在程序的不同阶段使用。而bitset 需要在编译时需要存储的元素数量。
【问题讨论】:
-
B派生自A并不意味着vector<B*> *可以转换为vector<A*> *,它们是完全不相关的类型。为什么需要在vecA中存储vector<B*> *?你到底为什么要new@vector?A需要有一个virtual析构函数,并查看unique_ptr,因为您使用的是 C++11。 -
@Praetorian 你能告诉我为什么我不应该新建一个向量吗?
-
@Praetorian 我需要创建至少一百万个这样的对象。它们被用作另一个类的私有成员。所以我在想可能是使用 unique_ptr 会导致性能下降。我在使用指针时小心使用 RAII。
-
A
vector已经为其内容动态分配内存并为您管理该内存,您极不可能需要动态分配vector本身。new不应该在 C++ 中随意使用,将其视为一个非常专业的工具,只有在您确切知道自己在做什么时才应该使用它。关于你添加的解释,为什么不把bitset中的元素个数作为模板参数呢? -
您是否有任何证据支持这种性能下降的说法?带有默认删除器的
unique_ptr实际上与自己管理指针相同,并且它可以防止您在每一次转弯时都在踢自己的脚。
标签: c++ pointers c++11 vector new-operator