#include <stdio.h>
#include <Windows.h>
#include <vector>
class test
{
private:
char* a;
public:
test()
{
}
test(char* _a)
{
a = new char[strlen(_a) + 1];
strcpy(a, _a);
}
~test()
{
printf("소멸자 호출\n");
delete []a;
}
void print()
{
printf(a);
}
};
std::vector<test> a;
void aa()
{
test re("안녕");
a.push_back(re);
return;
}
int main()
{
aa();
test result = a[0];
result.print();
return 0;
}
이 있으면 void aa() {return} 부분에서 test 소멸자 호출해서 내용이 사라져버림
넣는 인자는 보니까 test 의 포인터가 들어감
그래서 result.print() 에서 띄우는 내용이 읭읭해짐
방법 없을까요
깊은복사라던가 깊은복사라던가..
과제도우미님께서 해결한 질문입니다
헛.....
이동생성자는 첨보네.. 으이쿵
크.........................................................지린당
test(test&& rhs) : a(rhs.a) { rhs.a = NULL; }
흐잉ㅋㅋ
삼촌님 근데 이동해도 지역변수는 파괴되지않나요..? aa() 함수 지역변수 re가 파괴되서 문제인듯..
아 그러겠네여.
이 문제의 올바른 해법은 대입 연산자(operator =)를 오버로딩해서 객체 복사 시에 문자열 포인터를 다른 걸로 copy되게 하는 게 답임. 그러니까...
미친 디씨 리플 단어 필터링 극혐
뭐지. 대입 연산자 오버로딩했는데도 전혀 call이 안 되네 ㅡㅡ;