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

Wskaźniki inteligentne - czy w tym przypadku zastąpić surowe wskaźniki?

Ostatnio zmodyfikowano wczoraj o godz. 21:12
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
Wskaźniki inteligentne - czy w tym przypadku zastąpić surowe wskaźniki?
» 2025-11-03 20:42:54
Cześć. Mam parę funkcji, które chciałbym przepisać na wskaźniki inteligentne, ale nie za bardzo wiem czy jest sens, bo nadal słabo rozumiem koncepcje tych wkaźników.
Czy zastąpić sf::Image* wskaźnikami inteligentnymi? Obrazy oryginalne sf::Image na których pracuję nie są wskaźnikami.

C/C++
Lasso::Lasso();
Lasso::~Lasso();

void Lasso::shiftOriginIfNeeded( sf::Vector2i & point );
void Lasso::addPoint( sf::Vector2i point );
void Lasso::unselect();
void Lasso::generateRect();
bool Lasso::clickOnSelection( sf::Vector2i point );

void Lasso::paste( sf::Image * dst, sf::Image * src, int dstX, int dstY, sf::Image * mask, sf::Color alphaColor );
void Lasso::paste( sf::Image * canvas, sf::Color emptyColor );
void Lasso::cut( sf::Image * canvas, sf::Color emptyColor );
void Lasso::generateOutline( bool selectionComplete );
bool Lasso::pointOnSegment( sf::Vector2i p, sf::Vector2i a, sf::Vector2i b );
bool Lasso::isPointInPolygon( sf::Vector2i p, std::vector < sf::Vector2i > & poly );

sf::Image * Lasso::generateMask();
void Lasso::drawImage( sf::Vector2f canvasPosition, sf::Vector2i canvasSize, float scale, sf::Color alphaColor, bool useMask );
void Lasso::drawOutline( sf::Vector2f canvasPosition, float scale );
void Lasso::drawRect( sf::Vector2f canvasPosition, float scale );
void Lasso::draw( sf::Vector2f canvasPosition, sf::Vector2i canvasSize, float scale, sf::Color alphaColor );
P-183369
pekfos
» 2025-11-03 21:00:15
Obrazy oryginalne sf::Image na których pracuję nie są wskaźnikami.
Noo, inaczej byś nie miał na czym pracować. Zgaduję że to znaczy "wskazywany obiekt nie jest zaalokowany przez new"? To nie używasz wskaźników inteligentnych, one mają ostatecznie zwolnić obiekt przez delete lub inną metodę sprzątającą, nie robisz tego dla zmiennych lokalnych, czy globalnych.

Czy zastąpić sf::Image* wskaźnikami inteligentnymi?
Nie, ale może zastąpić referencjami. To to samo, tylko składnia jest wygodniejsza bo referencja nie może być pusta.
P-183370
tBane
Temat założony przez niniejszego użytkownika
» 2025-11-03 21:02:28
No właśnie czasami skopiowany obraz jest nullptr. Ale oryginalne obrazy są normalnie sf::Image. A czemu skopiowany obraz jest nullptr - ponieważ nie zawsze tj na początku zaznaczenia rect ma rozmiar 0x0
P-183371
pekfos
» 2025-11-03 21:05:14
I jaki sens ma wklejanie nieistniejącego obrazu? To brzmi jak coś co powinno być sprawdzone zanim wykonasz operację na obrazie. Niech operacja na obrazach zakłada że obrazy istnieją, trochę bez sensu by nie istniały.
P-183375
tBane
Temat założony przez niniejszego użytkownika
» 2025-11-03 21:07:49
Mhm.. no dobra. Spróbuję tak napisać kod, by obraz zawsze istniał i był przetwarzany gdy rozmiar zaznaczonego obszaru był conajmniej 1x1
P-183377
pekfos
» 2025-11-03 21:10:46
Wystarczy tak
C/C++
if( pObraz )
   
 paste( * pObraz, ..... );
możesz mieć w jednym miejscu obraz który czasem istnieje, czasem nie. To może mieć sens, za to nie ma sensu infekować tą logiką całego programu na zasadzie "mam akurat wskaźnik, więc nowa funkcja też będzie przyjmować wskaźnik". Kod powinien być samodokumentujący się, a to czy używasz w interfejsach wskaźników, referencji, na stałe lub nie, dużo mówi o działaniu funkcji.
P-183379
tBane
Temat założony przez niniejszego użytkownika
» 2025-11-03 21:12:03
Ok rozumiem, dzięki. Jutro tak poprawię kod. :-)
P-183380
« 1 »
  Strona 1 z 1