오류, 버그, 질문 - 페이지 1873

 
Stanislav Korotky :
최신 빌드에서 EA 코드를 변경하고 재컴파일해도 테스터가 잡아내지 못하는 버그가 있었나요? 테스트를 시작하려면 새로운 ex5 변형에 대한 터미널을 닫았다가 다시 열어야 합니다. 그렇지 않으면 이전 것이 테스트됩니다.
EA를 편집하고 CTRL+F5를 통해 또는 테스터에서 직접 적절한 결과를 봅니다.
 
fxsaber :
EA를 편집하고 CTRL+F5를 통해 또는 테스터에서 직접 적절한 결과를 봅니다.
Ctrl+F5가 디버깅 중입니까? 내 문제는 디버깅이 아니라 간단한 테스트를 시작하는 데 있습니다.
 
Stanislav Korotky :
Ctrl+F5가 디버깅 중입니까? 내 문제는 디버깅이 아니라 간단한 테스트를 시작하는 데 있습니다.
시각 자료 없이 편집 후 실행합니다.
 
fxsaber :

개인 생성자 로 숨겨진 클래스 객체 를 만드는 방법은 무엇입니까?

누수는 이렇게 진행됩니다

이러한 상황에서 소멸자를 호출하는 방법이 명확하지 않습니다. 싱글톤 - 그렇지 않습니다.

private 생성자가 있는 클래스의 개체는 해당 클래스의 특수 정적 함수를 사용해서만 만들 수 있습니다.

지금은 컴파일러가 당신이 제공한 코드를 맹신하지 않지만, 이것은 미래에 수정될 것입니다.

스마트 포인터를 사용하여 소멸자를 호출할 수 있습니다.

이 경우 소멸자가 열려 있어야 합니다.

 
Koldun Zloy :

private 생성자가 있는 클래스의 개체는 해당 클래스의 특수 정적 함수를 사용해서만 만들 수 있습니다.

지금은 컴파일러가 당신이 제공한 코드를 맹신하지 않지만, 이것은 미래에 수정될 것입니다.

제안된 통계입니다. 이 경우 방법은 일종의 자기기만이 될 것입니다. 왜냐하면 사실, 그것은 생성자가 될 것입니다. 그리고 분명히 호출해야 합니다.

스마트 포인터를 사용하여 소멸자를 호출할 수 있습니다.

이 경우 소멸자가 열려 있어야 합니다.

스마트 포인터란?
 

생성자가 private이어야 한다고 확신한다면 다른 방법은 없습니다.

스마트 포인터는 간단한 포인터를 포함하고 적시에 삭제되도록 하는 개체입니다.

 class MyClass
{
public :
   MyClass();
};

struct MyClassPtr
{
   MyClass* pMyClass;

   MyClassPtr( MyClass* myClass ) : pMyClass( myClass )
   {
   }
   ~MyClassPtr()
   {
       delete pMyClass;
   }
};

이것은 가장 쉬운 옵션입니다.

더 복잡한 스마트 포인터도 있습니다.

https://rsdn.org/res/book/cpp/cpp_real_programmers.xml에서 이에 대해 잘 설명되어 있습니다.

C++ : библиотека программиста
  • rsdn.org
Глава 5. Умные указатели Глава 6. Ведущие указатели и дескрипторы Глава 7. Грани и другие мудрые указатели Глава 8. Коллекции, курсоры, итераторы Глава 9. Транзакции и гениальные указатели
 

코드를 컴파일하기 위해 누락된 것:

 class CMyClass
  {
public :
   void * core;
   CMyClass( void ) : core( NULL ) { }
   template < typename T>
   void Create(T* a_ptr) {
      core = dynamic_cast <T *> (a_ptr);
   }
  };

class CCore
  {
public :
   int var;
   CCore( void ) : var( 3 ) { }
  };


int OnInit () {
   CCore *_point_1 = new CCore();
   CMyClass _obj;
   _obj.Create(_point_1);
   int _val = _obj.core.var;
   
   delete _point_1;
//---
   return INIT_SUCCEEDED ;
}

이 변형에서 'var'를 씁니다. 구조체 멤버가 정의되지 않았습니다.

추신. 무엇이 잘못되었는지 이해

int _val = dynamic_cast <CCore *>(_obj.core).var ;


 
void* 는 언어에서 어떤 빌드를 사용합니까?
 
fxsaber :
void* 는 언어에서 어떤 빌드를 사용합니까?

인터페이스가 나타났을 때
 
Sergey Dzyublik :

인터페이스가 나타났을 때
고맙습니다. 사실, 즉시 오류가 발생했습니다.
 struct PTR
{
   void * Ptr; // internal error #40
};