【发布时间】:2015-03-25 01:20:11
【问题描述】:
我对抽象类有这个问题,我在互联网上到处查找(包括这里https://msdn.microsoft.com/en-us/library/zxt206sk.aspx),我问了朋友,我仍然没有得到答案。
我有一个名为“RulePrvoider”的类,还有三个继承自“Rule Provider”的类“GlobalRuleProvider”、“UserRuleProvider”和“OrgRuleProvider”。我还有另一个名为“PacketFilter”的类,这就是我遇到的问题。
我发现如果我将“push_back”放在 cmets 中,程序会编译,但我似乎不知道为什么。
这是 PacketFilter.h:
#ifndef _PACKETFILTER_H
#define _PACKETFILTER_H
#include <vector>
#include <set>
#include "OrgRuleProvider.h"
#include "GlobalRuleProvider.h"
#include "UserRuleProvider.h"
class PacketFilter
{
private:
std::vector <RuleProvider>providers;
string globalProvider;
std::set <Rule>rules;
void update();
public:
PacketFilter(string globalProviderPath, string* orgProviderPath, string* userProviderPath);
bool filter(string srcIP, string srcPort, string dstIP, string dstPort, string protocol);
};
#endif
这是 packetFilter 构造函数(这就是我遇到问题的地方):
#include "PacketFilter.h"
PacketFilter::PacketFilter(string globalProviderPath, string* orgProviderPath, string* userProviderPath)
{
int i;
RuleProvider* rProv;
try{
rProv = new GlobalRuleProvider(globalProviderPath);
}
catch (int e){
std::cout << "exception number " << e << std::endl;
}
providers.push_back(*rProv);
for (i = 0; i <orgProviderPath->size(); i++)
{
rProv = new OrgRuleProvider(orgProviderPath[i]);
providers.push_back(*rProv);
}
for (i = 0; i < userProviderPath->size(); i++)
{
rProv = new UserRuleProvider(userProviderPath[i]);
providers.push_back(*rProv);
}
}
如果有人发现问题,我将非常高兴和感激。
提前致谢!
【问题讨论】:
-
您正在使用
new进行分配,然后推回一个副本,导致内存泄漏。如果你想要虚拟行为,你应该保留指针而不是对象。
标签: c++ class vector constructor abstract