1
기본 생성자에 인수를 전달할 때 std::move()
함수를 사용하면 생성 시간이 단축되는 이유는 무엇입니까? 이 예에서는 그래서 기본 클래스에 인수를 전달할 때 std :: move() 사용
struct Bar {
Bar(std::string);
std::string _s;
}
struct Foo : public Bar {
Foo(std::string);
}
struct Bar(std::string bs) : _s(std::move(bs)) {
// 1
}
struct Foo(std::string fs) : Bar(std::move(fs)) {
// 2
}
은 문자열의 추가 사본이 만들어지고 방지
Foo
의 생성자에서 사용되는
move()
합니까?
그리고 해명
,이 디자인은 시도를 의미하지 않는 점// 1
및
// 2
에서
bs
및
fs
를 사용하도록해야한다, 그러나
_s
를 사용하여 두 곳에서 안전 할 것인가?
#include <iostream>
struct String
{
String() {}
String(const String&) {std::cout << "String(const String&)\n";}
String& operator=(const String&)
{std::cout << "String& operator=(const String&)\n"; return *this;}
String(String&&) {std::cout << "String(String&&)\n";}
String& operator=(String&&)
{std::cout << "String& operator=(String&&)\n"; return *this;}
};
struct Bar {
Bar(String);
String _s;
};
struct Foo : public Bar {
Foo(String);
};
Bar::Bar(String bs) : _s(std::move(bs)) {
// 1
}
Foo::Foo(String fs) : Bar(std::move(fs)) {
// 2
}
int main()
{
Foo f{String()};
}
이 출력합니다 나를 위해 :
좋은 실험입니다. 고맙습니다. –