리사이클 러 클래스의 객체를 사용하여 객체 만 삭제되는 클래스 (소멸자는 가상 임)를 작성했습니다. 그러나 나는 어느 누구라도 나의 리사이클 러 클래스에 대한 지식이 없어도 그 클래스의 객체를 삭제할 수 있다는 것을 발견했다. class A
{
public:
A() {qDebug() << "cTor: A";}
protected:
v
필자가 아는 한, 가상 함수가 있지만 비상 가상 소멸자가있는 클래스를 정의하는 것은 항상 실수 (또는 최소한 문제를 요구한다)이다. 이와 같이 (새로 작성한 "제로 규칙"에 대해 생각하면) 내게 암시 적으로 생성 된 소멸자는 적어도 하나의 다른 가상 함수가있는 클래스의 경우 가상으로 있어야합니다. 향후 버전의 C++ 표준에서이를 위임 할 수 있습니까? 또는
안녕하세요 파생 클래스에서 파생 클래스를 만들려고합니다. 하지만이 메모리 문제를 해결하는 방법을 모르겠습니다. 아래의 클래스 C는 자신의 소멸자와 B 소멸자를 호출합니다. 하지만 그건 내 기억을 엉망으로 만든다. 다른 aproach를 사용해야합니까, 아니면 해결책이 있습니까? class A {
public:
virtual ~A() {}
};
누군가 C++ 오브젝트 모델에 관한이 이론적 질문을 설명 할 수 있습니까? 그것은 최근의 시험이었고 나는 그 문제로 곤란을 겪었습니다. 질문 : C++ 표준위원회는 Java, C# 및 Smalltalk의 성공에 주목하여 언어의 개체 모델에 추가 수준을 추가하기로 결정했습니다. 즉, 각 클래스에는 런타임에 표현이있는 메타 클래스가 있어야합니다. 상대방은 이것
GNU 컴파일러를 사용하고 있습니다. 클래스 B의 가상 소멸자는 소멸자 ~ D()를 호출하지 않습니다. 아무도 그 이유를 말할 수 있습니까? #include<iostream>
using namespace std;
class B {
double* pd;
public:
B() {
pd=new double [20];
기본 클래스가 int를 포함하고있는 파일 설명자에 대한 클래스 계층 구조를 가지고 놀았습니다. 파괴 중에 하위 클래스에 close이 호출되고 자식 클래스는 가상 메서드 나 데이터 멤버를 추가하지 않습니다. named_file_filedes은 경로를 가져 와서 ctor에서 open으로 기본을 초기화하거나 가상 멤버가 아닌 함수로 초기화합니다 (예 : kque
catch 블록 범위를 벗어날 때 예외 소멸자가 호출됩니까? (우리가 다시 던지 지 않는 경우) 클래스 A가 있고 소멸자가 가상이 아니라고 가정합니다. B는 예외 소멸자 경우에, 캐치 범위를 벗어난다 이동 호출하는 경우 A. 일부 기능은 예외 으로 B 클래스의 객체를 던지고가 캐치 블록 catch(A& a){
...
}
의해 잡힌 가정 상속 이 경우
을 삭제하려고 할 때 디버그 어설 션이 실패했습니다. C++을 처음 사용하고 가상 함수를 학습하고 클래스에 가상 함수가 있고 클래스에 포인터 멤버가 있으면 가상 소멸자를 작성해야한다는 것을 알아야합니다. 다음은 내 코드입니다, 나는 모두 디버그 어설의 오류 창 실패를 줄 것이다 가상 스튜디오 2013RC #include<iostream>
using na
다른 클래스에서 상속받은 클래스가 있다고 가정하고 기본 클래스 지점에서 파생 클래스 객체로 포인터를 만듭니다. 이제 기본 클래스 소멸자가 가상으로 정의 된 경우 문제가 발생하지 않습니다. 그러나, 제 경우에는 기본 클래스 소멸자가 가상으로 선언되지 않았으므로이 포인터를 삭제하면 메모리 누수가 발생합니다. 기본 클래스 코드를 수정하지 않고 어떻게이 문제를 해