g++에서 연산자 overriding과 복사생성자가 함께 쓰여진 경우
글쓴이: hwiorb / 작성시간: 일, 2011/10/30 - 8:22오후
이항 연산자를 overriding해서 사용하려고 합니다. return 될때 복사생성자가 호출되어야 할 것 같은데,
왜 복사생성자가 호출이 안되고, 객체 참조가 되는지 이유를 모르겠습니다.
소스는 아래와 같습니다
어떻게 해야 될까요? 도움 부탁드립니다.
#include <iostream> #include <string.h> using namespace std; class CopyCons { char * st; public: CopyCons() { st = NULL; } CopyCons(char * st); CopyCons(CopyCons &s); CopyCons operator + (char * st); virtual ~CopyCons(); char * get_st() { return st; } }; CopyCons::CopyCons(char * st) { this->st = new char[strlen(st) + 1]; strcpy(this->st, st); } CopyCons::CopyCons(CopyCons &s) { this->st = new char[strlen(s.st) + 1]; strcpy(this->st, s.st); } CopyCons::~CopyCons() { if(st != NULL) delete [] st; } CopyCons CopyCons::operator + (char * s) { char * buffer = new char[strlen(st) + strlen(s) + 1]; strcpy(buffer, st); strcat(buffer, s); CopyCons t(buffer); delete [] buffer; return t; } int main() { CopyCons c1("hello"), c2; c2 = c1 + " world~!"; cout << "um? " << c2.get_st() << endl; }
Forums:
기존 소스에서 대입연산 override가 쓰고있는
기존 소스에서 대입연산 override가 쓰고있는 까닭에 이 건 아닐거라고 생각했는데,
대입 연산자까지 override를 해야지만, 제대로 된 결과를 볼수 있군요.
nil.
참고로...
www.gilgil.net
댓글 달기