私はC++にまったく慣れておらず、次のようにstd::vector内にオブジェクトを格納しようとしています。
Event.h:
//event.h
class Event
{
public:
Event();
Event(std::string name);
~Event();
void addVisitor(Visitor visitor);
private:
std::vector<Visitor> m_visitors;
};
Event.cpp:
//event.cpp
Event::Event() :
m_name("Unnamed Event")
{
}
Event::Event(std::string name) :
m_name(name)
{
}
void Event::addVisitor(Visitor visitor)
{
this->m_visitors.push_back(visitor);
}
void Event::listVisitors()
{
std::vector<Visitor>::iterator it;
for(it = this->m_visitors.begin();it != this->m_visitors.end(); ++it)
{
std::cout << it->getName() << std::endl;
}
}
Visitor.h:
//visitor.h
class Visitor
{
public:
Visitor();
Visitor(std::string name);
~Visitor();
std::string getName() const;
void listVisitors();
private:
std::string m_name;
};
Visitor.cpp:
//visitor.cpp
Visitor::Visitor() :
m_name("John Doe")
{
}
Visitor::Visitor(std::string name) :
m_name(name)
{
}
std::string Visitor::getName() const
{
return m_name;
}
main.cpp:
//main.cpp
int main()
{
Event *e1 = new Event("Whatever");
Visitor *v1 = new Visitor("Dummy1");
Visitor *v2 = new Visitor("Dummy2");
e1->addVisitor(*v1);
e1->addVisitor(*v2);
}
このようにすると、オブジェクトがベクターに適切にコピーされるように、ディープコピーを作成するコピーコンストラクターを追加する必要があります。オブジェクトへのポインタをベクトルに格納するだけで、それを回避する方法を探しています。すでにで試しましたstd::vector<std::unique_ptr<Visitor> > m_visitors
が、main.cppでaddVisitorを呼び出すとエラーが発生しました。もちろん、それに応じてクラスメンバーの宣言を変更しました。メンバーとメンバー関数の適切な宣言は、それを機能させるためにどのように見えますか?