私は、次のコードを得た:私は、ベクターでのWorkers
でFactory
格納を持っている(Code Live: C++ Shell)C++オブジェクトはstd :: movedを取得しませんか?
class Worker
{
public:
Worker (std::string name):_name (name) {};
Worker (const Worker & worker):_name (worker._name)
{ std::cout << _name << " got copied!" << std::endl; }
Worker (Worker && other):_name (other._name)
{ std::cout << _name << " got moved!" << std::endl; }
~Worker()
{ std::cout << _name << " got destroyed!" << std::endl; }
void changeName(std::string name)
{ this->_name = name; }
private:
std::string _name;
};
class Factory
{
public:
Factory()
{ std::cout << "Factory got created!" << std::endl; }
~Factory()
{ std::cout << "Factory got destroyed!" << std::endl; }
void addWorker (Worker & worker)
{ this->workers.push_back (std::move (worker)); }
Worker & getLastWorker()
{ this->workers.back(); }
private:
std::vector <Worker> workers;
};
int main()
{
auto factory = std::make_unique <Factory>();
Worker w1 ("Bob");
factory->addWorker (w1);
Worker & workerRef = factory->getLastWorker();
//workerRef.changeName("Mary");
return 0;
}
を。私はmain()
を実行すると、私は次のような出力を得る:
Factory got created!
Bob got moved!
Bob got destroyed!
Factory got destroyed!
Bob got destroyed!
をしかし、私はWorker w1
がFactory
にベクトルworkers
に移動します思ったようBob got destroyed!
が、2回表示されますなぜ周り私の頭を取得することはできません。また、workerRef.changeName("Mary");
にコメントすると、コードがSegmentation fault
でクラッシュします。
私は今月1ヶ月間C++でコーディングしており、ここで本当に苦労しています。私はしばらくの間グーグルで探せましたが、ヒントが見つからないので、どんな助けも素晴らしいです!
ここから移り変わる何かへの参照は、非常に驚くべきインターフェイスのように感じます。この選択の理由はありますか? –
私はhttps://youtu.be/cO1lb2MiDr8?t=30m46sを見て、彼はどこにstd :: moveをpush_back()内のstd :: vectorで動かすことを提案しました。それは私がそれを試した唯一の理由です。 – DummySenior