다음과 같은 문제가 있습니다. myClass에서 yourClass에 대한 포인터를 기본값으로 초기화하고 새 yourClass 주소로 포인터를 초기화하고 싶습니다. 불행히도, 어떤 시점에서 포인터를 삭제하려면 (코어 덤프) 얻을.C++ 기본 생성자, 새 개체를 사용하여 포인터를 초기화하는 중
class myClass
{
protected:
yourClass * yc;
public:
myClass() { yc = new yourClass(); }
myClass(yourClass * tyc) { delete yc; yc = tyc; }
~myClass() { delete yc; yc = NULL; }
void setMyClass (yourClass * tyc) { delete yc; yc = tyc; }
void print() { yc->print(); }
};
int main()
{
yourClass b (//parameter);
myClass * a = new myClass();
a->print();
a->setMyClass(&b)
a->print();
delete a;
return 0;
}
의 print()는 // 매개 변수에 따라 두 가지 다른 인쇄 결과가 나옵니다.
나는 yourClass yc를 고려했다. yourClass * yc 대신에 가능하지만 가능한지 알고 싶습니다.
편집 : 다음과 같은 방식으로 코드를 다시 작성했습니다. 여전히 복잡해 보입니다. 현명한 포인터는 유망 해 보입니다. 그리고 나는 여전히 "Rule of Three"를 적용하지 않았습니다. 여기에 코드가 있습니다. 모두에게 감사드립니다. 너무 많이 삭제하려고하기 때문이다
class myClass
{
protected:
yourClass * yc;
bool dynamic;
public:
myClass() { dynamic = true; yc = new yourClass(); }
myClass (yourClass * tyc)
{
// dynamic init (like default)
if (tyc == NULL) { dynamic = true; yc = new yourClass(); }
// static use of yc
else { dynamic = false; yc = tyc; }
}
// because only if dynamic is true, we need to erase
~blu() { if (dynamic) { delete yc; dynamic = false; } }
void setMyClass(yourClass* tyc)
{
// leaving unchanged if new-stuff is NULL or like old-stuff
if (tyc == yc || tyc == NULL) return;
else // treating dynamic and static differently
{
if (dynamic) // if flag is set, must be deleted
{
delete yc; yc = tyc; dynamic = false;
}
else // must not be deleted, dynamic is still false
{
yc = tyc;
}
}
}
void print() { yc->print(); }
};
이것은 가능해야한다 - yourClass의 소멸자는 무엇을 포함 하는가? – 1615903
오, 나는 매개 변수가있는 생성자에서 yc를 삭제해야한다고 생각하지 않습니다. – 1615903