私がコンテナを持っていて、std::map<int, std::shared_ptr<MyClass>>
それを外部関数に入力し、その内容の対処を避けたいと考えてください。ので、私は持っています
typedef Container std::map<int, std::shared_ptr<MyClass>>
Container&& f(){
Container bar;
auto foo = std::shared_ptr<MyClass>(new MyClass());
bar.insert(std::make_pair(0,foo));
std::cout<<bar.at(1)->print_smth<<'\n'; //This works
return std::move(bar);
}
int main(){
Container baz(f());
std::cout<<bar.at(1)->print_smth<<'\n'; //This doesn't
// Container baz has element 1, but shared_ptr is invalidated, because it has 0 references.
}
従来のコピーコンストラクターを使用すると、すべてが期待どおりに機能します。