분석 함수virtual과 비virtual의 차이
2317 단어 virtual
코드 예:
#include <iostream.h>
struct A
{
virtual ~A() {cout<<"~A()
";}
};
struct B: public A
{
~B() {cout<<"~B()
";}
};
void main()
{
A* p = new B;
delete p;
}
만약 A의 분석 함수가virtual이 아니라면, 이때는 B의 분석 함수를 먼저 호출한 다음에 A의 분석 함수를 호출하는 것이 아니다. Output:~A();A의 분석 함수가virtual이면 먼저 ~ B (), 그리고 ~ A () Output: ~ B ()A();클래스가 파생될 경우 분석 함수는 일반적으로virtual로 정의해야 하는데 주로 메모리 유출을 방지하는 것이 아니라 정확한 분석을 위한 것이다.폐쇄류 (즉 파생되지 않음) 라면 가상 클래스로 정의하지 마십시오.허함수는 결국 소모가 비교적 크다.
virtual을 사용하지 않는 몇 가지 상황: 1. 비공유 기류로서.private base class로만 사용되는class는 가상 분석 함수 2를 사용할 필요가 없고 인터페이스로 사용되지 않는 기본 클래스입니다. 3.만약 이 클래스가 퍼블릭 계승되지 않도록 보장할 수 있다면 (private/protected 계승) 4.만약 그의 모든 파생류(파생류를 포함한 파생류)의 분석 함수가 trivial이라면 (이곳의 trivial은 프로그래머의 차원에서 아무 일도 하지 않는 것을 가리킨다)만약에 기류의 지침으로 파생류의 대상을 가리킬 필요가 없다면 이 다섯 가지 상황에서 분석 함수를virtual이라고 성명하지 않아도 된다. 하물며 효율이 좀 높을 것이다. 그러나 전제는 전제의 성립을 보증해야 한다. 그러나 이런 보증은 항상 100% 어렵다. 누가 다른 사람이 당신의 종류를 파생시킬 때 분석 함수는trivial이다.아니면 다른 사람이 당신이 제공한 기류의 지침을 사용하지 않고 파생류의 대상을 가리키나요?이런 것들은 종종 보증을 얻기 어렵다.
성명 기류의 분석 함수가virtual인 것은 항상memory leak을 방지하기 위한 것이 아니다. 또한 이것은 일반적인 원칙일 뿐이다. (기류에 허함수가 있으면 그 분석 함수를virtual로 성명한다.)만약 당신의 분석 함수가 아무 일도 하지 않는다면, 효과상으로는 가상 함수라고 성명하지 않아도 무방하다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
분석 함수virtual과 비virtual의 차이일반적인 원칙으로, 만약 하나의 클래스가 허함수를 정의한다면, 그 분석 함수는virtual이어야 한다.허함수를 정의하면 이 클래스는 계승되고 기본 클래스의 바늘을 통해 하위 클래스의 대상을 가리키며 다태성을 얻을 수...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.