컴파일러 경고(수준 2) C4275
non - DLL 인터페이스 클래스 'class_1'가 DLL 인터페이스 클래스 'class_2'의 기반으로 사용됩니다.
내보낸 클래스는 내보내지 않은 클래스에서 파생되었습니다.
__declspec(dllexport)를 사용하여 클래스를 내보낼 때 데이터 손상 가능성을 최소화하려면 다음을 확인합니다.
모든 정적 데이터는 DLL에서 내보낸 함수를 통해 액세스됩니다.
클래스의 인라인 메서드는 정적 데이터를 수정할 수 없습니다.
클래스의 인라인 메서드는 정적 데이터를 사용하는 CRT 함수 또는 기타 라이브러리 함수를 사용하지 않습니다.
인라인 클래스 함수는 정적 데이터에 액세스하는 CRT 함수 또는 기타 라이브러리 함수를 사용하지 않습니다.
인라인 처리에 관계없이 클래스의 메서드는 EXE 및 DLL의 인스턴스화에 정적 데이터 차이가 있는 형식을 사용할 수 없습니다.
가상 함수를 사용하여 클래스를 정의하는 DLL과 형식의 개체를 인스턴스화하고 삭제하기 위해 호출할 수 있는 함수를 정의하여 클래스를 내보내지 않도록 할 수 있습니다. 그런 다음, 형식에서 가상 함수를 호출할 수 있습니다.
C++ 표준 라이브러리의 형식에서 파생되어 디버그 릴리스(/MTd)를 컴파일하고 컴파일러 오류 메시지가 참조되는 경우 Visual C++에서 C4275를 무시할 수 있습니다 _Container_base
.
// C4275.cpp
// compile with: /EHsc /MTd /W2 /c
#include <vector>
using namespace std;
class Node;
class __declspec(dllimport) VecWrapper : vector<Node *> {}; // C4275