d 포인터 클래스 정의에 새 멤버 함수를 추가해도 바이너리 호환성이 깨지지 않습니까?새로운 멤버 함수를 포인터 클래스 휴식 이진 호환성에 추가합니까?
예를 들어, 아래의 새 정의는 원본과 비교하여 바이너리 호환성을 손상시킬 수 있습니까? (? 측면 질문, 새로운 .so를 이진 호환성을 중단하는 경우 그렇지 않다면, 어떻게 수동으로 확인 할 이전 .so를 비교 말해하는 도구가 있습니까?)
원본 :
#ifndef __TESTBC_H__
#define __TESTBC_H__
class APrivate;
class A
{
public:
int get() { d->update(); return _d->get(); }
private:
APrivate *_d;
};
class APrivate
{
public:
int get() { return _val; }
void update() { _val = 1; }
private:
int _val;
};
#endif
새로운 :
#ifndef __TESTBC_H__
#define __TESTBC_H__
class APrivate;
class A
{
public:
int get() { _d->update(); return _d->get(); }
private:
APrivate *_d;
};
class APrivate
{
public:
int get() { return _val; }
void update() { _val = 1; multiply(); }
void multiply() { _val = _val * 10; }
private:
int _val;
};
#endif
FYI : 나는 포인터 클래스가 헤더 대신 cc 파일에 지정되어야한다고 생각합니다. 위 예제는 바이너리 호환성 문제에 중점을두기 위해 고안된 것입니다.
타일을 개선 할 수 있습니다 ... 새로운 기능이 개인 클래스에 추가된다는 것을 명확하게 설명합니다. – IsaacS