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

Czy trzymać sf::RectangleShape w pamięci oraz inteligentne wskaźniki

Ostatnio zmodyfikowano dzisiaj: 9h » 17 min
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
» 2025-10-28 22:24:53
No bo dopiero co zaczynam przygodę z inteligentnymi wskaźnikami. Cały czas pracowałem z surowymi i było ok. I pojawiłeś się Ty :D i teraz mój światopogląd obrócił się o 180 stopni i nie rozumiem :D

Dam przykład:
-mamy grę i zbiór potworów. Każdy z potworów jest obiektem i ma wskaźnik na sprajt. Ten wskaźnik to wskaźnik inteligentny. Teraz chcemy zebrać wszystkie sprajty potworów do renderowania to zbieramy je w std::vector<Monster*> monsters i możemy przetwarzać potworki?

C/C++
for( auto & monster: monsters ) {
   
window.draw( monster->sprajt.sprite );
}
P-183335
pekfos
» 2025-10-28 22:30:09
Sam się kręcisz w kółko od tego obracania o 180 co chwila. Wskaźniki inteligentne to narzędzia które nie zastąpią zwykłego wskaźnika w 100% i nie mają tego robić. Nie bez powodu masz 3 rodzaje w bibliotece standardowej. One mają ułatwić życie w konkretnych zastosowaniach. Jeżeli masz do czynienia z takim zastosowaniem, powinieneś z nich skorzystać, bo zwyczajnie łatwiej napisać kod który jest poprawny i bez wycieków pamięci. Możesz też pisać wszystko ręcznie zwykłymi wskaźnikami, ale napisanie kodu poprawnie wymaga uwzględnienia różnych niuansów - patrz przykład który podałem, w którym jest możliwy wyciek pamięci mimo wykonania delete w destruktorze.

Teraz chcemy zebrać wszystkie sprajty potworów do renderowania do zbieramy je w std::vector<Monster*> monsters?
Skoro chcesz zebrać sprajty, to powinny to chyba być wskaźniki na sprajty. Czy nie?
P-183336
tBane
Temat założony przez niniejszego użytkownika
» 2025-10-28 22:37:51
Masz rację.

Tu też zastąpić surowe wskaźniki inteligentnymi ?
C/C++
class Dialog_Load_SpriteSheet
    : public Dialog
{
public:
   
   
sf::Image spriteSheet;
   
Animation * _animation;
   
sf::Texture _frameTexture;
   
sf::Time _lastFrameTime;
   
   
TextInput * _widthOfFrame;
   
TextInput * _heightOfFrame;
   
TextInput * _animationsCount;
   
TextInput * _frameCount;
   
   
sf::Text * _widthOfFrameText;
   
sf::Text * _heightOfFrameText;
   
sf::Text * _animationsCountText;
   
sf::Text * _frameCountText;
   
   
sf::RectangleShape _rect;
   
ColoredButtonWithText * _confirmBtn;
   
ColoredButtonWithText * _cancelBtn;
};
P-183337
pekfos
» 2025-10-28 22:43:10
Zależy jak są używane. Jeżeli wskazują na obiekty, których czas życia jest zarządzany przez klasę Dialog_Load_SpriteSheet, możesz je zmienić na inteligentne. Wtedy część tego zarządzania (zwalnianie) będzie robić wskaźnik inteligentny.
P-183338
tBane
Temat założony przez niniejszego użytkownika
» 2025-10-28 22:45:34
Czyli jakoś tak ...

C/C++
class Dialog_Load_SpriteSheet
    : public Dialog
{
public:
   
   
sf::Image spriteSheet;
   
Animation * _animation;
   
sf::Texture _frameTexture;
   
sf::Time _lastFrameTime;
   
   
std::unique_ptr < TextInput > _widthOfFrame;
   
std::unique_ptr < TextInput > _heightOfFrame;
   
std::unique_ptr < TextInput > _animationsCount;
   
std::unique_ptr < TextInput > _frameCount;
   
   
std::unique_ptr < sf::Text > _widthOfFrameText;
   
std::unique_ptr < sf::Text > _heightOfFrameText;
   
std::unique_ptr < sf::Text > _animationsCountText;
   
std::unique_ptr < sf::Text > _frameCountText;
   
   
sf::RectangleShape _rect;
   
std::unique_ptr < ColoredButtonWithText > _confirmBtn;
   
std::unique_ptr < ColoredButtonWithText > _cancelBtn;
};
P-183339
tBane
Temat założony przez niniejszego użytkownika
» 2025-10-28 22:50:22
Tyle zmian, aż dziwne, że się w tym jeszcze nie pogubiłem i program działa. Widać na prawdę słaby kod pisałem :-/
Z dwa dni to jeszcze będę poprawiał :D
P-183340
tBane
Temat założony przez niniejszego użytkownika
» 2025-10-29 00:15:00
Poczytałem i znalazłem jeszcze std::shared_ptr

Może przydać się do tego pola do scrollowania
P-183341
1 2 3 4 « 5 »
Poprzednia strona Strona 5 z 5