Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Destruktor i Try .. Catch

Ostatnio zmodyfikowano 2026-04-04 20:40
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
Destruktor i Try .. Catch
» 2026-04-04 18:59:42
Cześć. Chcę napisać dobrze program tak jak zalecił mi jeden z użytkowników tego forum pekfos i postanowiłem dodać try .. catch do destruktora. Czy dobrze jest napisany poniższy desktruktor?

Struktura klasy
C/C++
class Dialog_Brightness_Contrast
    : public Dialog
{
public:
   
BrightnessContrastState _state;
   
   
std::shared_ptr < SliderWithButtons > _brightness_slider;
   
std::shared_ptr < SliderWithButtons > _contrast_slider;
   
   
std::shared_ptr < ColoredButtonWithText > _reset;
   
std::shared_ptr < ColoredButtonWithText > _confirm;
   
   
std::vector < std::shared_ptr < Layer >> _original_layers;
   
std::vector < std::shared_ptr < Layer >> _edited_layers;
   
   
Dialog_Brightness_Contrast( std::vector < std::shared_ptr < Layer >> layers );
   
~Dialog_Brightness_Contrast();
   
   
void saveOriginalLayers( std::vector < std::shared_ptr < Layer >> layers );
   
void setPosition( sf::Vector2i position );
   
void setTheFilter();
   
   
void cursorHover();
   
void handleEvent( const sf::Event & event );
   
void update();
   
void draw();
   
};

Destruktor
C/C++
Dialog_Brightness_Contrast::~Dialog_Brightness_Contrast() {
   
   
try {
       
if( Dialog_Brightness_Contrast::_state == BrightnessContrastState::Idle ) {
           
// is Reset - backup layers
           
_brightness_slider->setValue( 0 );
           
_contrast_slider->setValue( 0 );
           
           
getCurrentAnimation()->getCurrentFrame()->_layers.clear();
           
getCurrentAnimation()->getCurrentFrame()->_layers = _edited_layers;
           
layers_panel->loadLayersFromCurrentFrame();
       
}
       
else {
           
// is Edited - add effect to selection
           
if( selection->_state == SelectionState::Selected ) {
               
sf::Image original_image = getCurrentAnimation()->getCurrentLayer()->_image;
               
pasteImageWithMask( getCurrentAnimation()->getCurrentLayer()->_image, * selection->_resizedImage, selection->_resizedRect.position.x, selection->_resizedRect.position.y, * selection->_resizedMaskImage,( toolbar->_option_transparency->_checkbox->_value == 0 ) ? sf::Color::Transparent
                    : toolbar->_second_color->_color );
               
history->saveStep();
               
canvas->_isEdited = true;
               
selection->normalize( selection->_resizedRect );
               
getCurrentAnimation()->getCurrentLayer()->_image = original_image;
           
}
           
else {
               
history->saveStep();
           
}
        }
    }
   
catch( const std::exception & e ) {
       
std::cerr << "Exception in Dialog_Brightness_Contrast destructor: " << e.what() << std::endl;
   
}
   
catch( ... ) {
       
std::cerr << "Unknown exception in Dialog_Brightness_Contrast destructor" << std::endl;
   
}
}
P-184012
« 1 »
  Strona 1 z 1