vector的使用问题
mul 2006-04-17 05:46:59 以下一段程序:
#include <vector>
using namespace std;
class resource
{
public:
resource() : _memory(0){}
virtual ~resource() {}
resource(resource& aResource)
{
_memory = aResource._memory;
aResource._memory = 0;
}
void alloc(size_t len)
{
_memory = new unsigned char[len];
}
void clear()
{
if (_memory != 0)
delete[] _memory;
_memory = 0;
}
protected:
unsigned char* _memory;
private:
};
int main(int argc, char* argv[])
{
resource res;
vector<resource> resources;
resources.push_back(res);
return 0;
}
编译失败,提示:error C2558: class“resource” : 没有可用的复制构造函数或复制构造函数声明为“explicit”。
看提示好像是需要const参数的拷贝构造函数,但我的aResource拷贝时是需要修改的,无奈,改了拷贝构造:
resource(const resource& aResource)
{
_memory = aResource._memory;
resource& ref = const_cast<resource&>(aResource);
ref._memory = 0;
}
这代码看了有点别扭,本来aResource是需要修改的,却又加了const修饰,在函数内部又去修改它。
不清楚大家是怎么解决这个问题的?
再想问一下,vector::push_back的参数为什么非要用const修饰(好像其他方法也都是这样)?