class TestClass
{
public:
TestClass(){
cout<<"constructor"<<endl;
p = {1,2,3};
cout<<(unsigned int *)(this->p.data())<<endl;
}
TestClass(const TestClass& test): p(std::move(test.p))
{
cout <<"copy constructor"<<endl;
cout<<(unsigned int *)(this->p.data())<<endl;
}
TestClass(TestClass && test): p(std::move(test.p))
{
cout <<"move constructor"<<endl;
cout<<(unsigned int *)(this->p.data())<<endl;
}
private:
std::vector<int> p;
};
int main()
{
TestClass t{};
TestClass p{t};
TestClass s{std::move(p)};
return 0;
}
그리고 출력이 생성자 아래의 주소는 아래와 다른 이유를 난 그냥 궁금왜이 벡터를 사용자 정의 클래스의 복사 생성자에서 이동할 수 없습니까?
constructor
0xb92bf0
copy constructor
0xb915b0
move constructor
0xb915b0
이다 생성자를 복사합니다. 내가 이해하는 것으로부터 복사 생성자조차도 사용되지만 std :: move를 사용하여 rvalue 참조를 얻고 벡터의 이동 생성자를 호출해야하므로 동일한 객체 여야합니다.
이동하려면 원본 개체를 수정해야합니다. – StoryTeller
복사 생성자는 이동하지 않는 복사를위한 것으로, 생성자는 이동 생성자입니다. 이런 의미를 바꿀 때 그 클래스의 복사 생성자가 어떻게 작동해야하는지에 대한 bork의 기대가있다. –
'TestClass (const TestClass & test)''const '는'move'하지 말고'const'를 제거하면 기대 한 것을 볼 수 있지만 왜'ctor''가'move'입니까? – PYA