Aktywne Wpisy
gosvami +191
fujiyama +24
#programowanie #programista15k
Chyba czas zmienić zawód. Chciałem wybić dziury na okna w domu, który kupiłem.
Trzeba wziąć piłę, wyciąć w ścianie 6 dziur 2x1.5 metra, a wcześniej wstawić nadproże czyli kawałek betonu nad oknem i zacementować.
Przyszedł Pan, obejrzał, pomierzył po czym zadzwonił i powiedział, że za całość to on weźmie 36K bo tak mu wyszło z cennika z jakiegoś zasr$#go portalu dla budowlańców.
To za te max 5 dni roboty wyjdzie
Chyba czas zmienić zawód. Chciałem wybić dziury na okna w domu, który kupiłem.
Trzeba wziąć piłę, wyciąć w ścianie 6 dziur 2x1.5 metra, a wcześniej wstawić nadproże czyli kawałek betonu nad oknem i zacementować.
Przyszedł Pan, obejrzał, pomierzył po czym zadzwonił i powiedział, że za całość to on weźmie 36K bo tak mu wyszło z cennika z jakiegoś zasr$#go portalu dla budowlańców.
To za te max 5 dni roboty wyjdzie
Widzę, że są dwa sposoby:
Object *myObject = new Object;
Object myObject;
Rozumiem, że ten pierwszy to jest sposób na dynamiczne alokowanie pamięci, to znaczy wskaźnik umieszczany jest na stosie, a na stercie ląduje obiekt. Czyli coś co jest domyślne w Javie czy C# z tą różnicą, że w C# to nie wskaźnik tylko referencja, ale jest to chyba praktycznie to samo.
Z kolei ten drugi sposób to rozumiem, że jest to alokowanie na stosie? Jeśli tak to jestem trochę zmieszany kiedy czego używać. Wiadomym jest, że szybciej działa się na elementach ze stosu, ale przecież obiekty potrafią być duże więc istnieje ryzyko przepełnienia stosu więc wydaje się to ryzykowne rozwiązanie i w takim wypadku nie rozumiem na jakiej podstawie miałbym stwierdzać czy lokować obiekt na stosie czy na stercie.
#programowanie #cpp
to trzeba experta
@TheMoonTheMoon
I ogólnie
new
się nie używa od jakiś 10 lat, żeby alokować na stercie używa się smart pointerów jakstd::unique_ptr
czystd::shared_ptr
.new Object;
tworzy nową zmienną o zasięgu dynamicznym, gdzie po alokacji odpowiedniej ilości pamięci wywołuje domyślny konstruktor.Object *myObject
jest automatyczną zmienną wskaźnikową przechowującą adres pamięci zaalokowany w poprzednim punkcie.Object myObject;
jest automatyczną zmienną, która zawiera obiekt w stanie po wywołaniu domyślnego konstruktora.Zmienne automatyczne są automatycznie (sic) niszczone (destruktor
Pewnie niewiele zrozumiałeś ale to nie szkodzi
@grzegorzx86: Niby tak ale nie do końca xD W nowoczesnym C++ jednak mocno polega się na value semantics i RVO więc tworzenie zmiennych na stosie jest często jak najbardziej w porządku.
Bo C# jest wolny w porównaniu do C++ i performance nie jest tam na pierwszym miejscu.
@maestrozo: Wydaje Ci się xDDDDDDDDDDDDDD Jestem tylko skromnym klepaczem kodu i klepie sobie c++, klep, klep