Obiekty w klasie, wskaźniki

0

Ema
Jestem początkujący w C++, przepraszam jeśli pytanie jest za głupie

Mam w projekcie kilka klas, chciałbym by jedna klasa zawierała obiekt drugiej klasy. Obiekt tej drugiej klasy będzie modyfikowany "spoza klasy pierwszej" więc aby te zmiany były uwzględniane i klasa pierwsza nie miała kopii obiektu tylko obiekt oryginalny, to z tego co wiem muszę trzymać ten obiekt za pomocą referencji albo wskaźnika.

Referencja chyba odpada, bo obiekt klasy drugiej jest ustawiany za pomocą metody setCostam już po utworzeniu instancji klasy pierwszej, a referencja musi być zainicjalizowana i wywala (nie chcę tej referencji podawać w konstruktorze przy tworzeniu obiektu klasy pierwszej, no chyba że to MUST HAVE jak gada informatyk Zelent)

Wskaźnik za to sprawia się dobrze i wszystko działa ideolo, jednak gdzieś czytałem że lepiej w modern C++ nie używać tych raw pointers, bo to wstyd, żenada, low skill developer i wgle niebezpieczne i ze lepiej używać jakiś unique ptr czy smart pointer czy coś takiego.

Zapoznałem się z popularnymi pytaniami na jedynej słusznej wyroczni Stack Overflow ale niestety, mój Inglisz chyba coś nie domaga albo skill programistyczny, albo Hindus posta za***ał, bo jakoś nie czuję tego. Po co używać tych "smart wskaźników"? Jak zadeklarować w klasie taki smart wskaźnik na obiekt innej klasy i czy muszę potem stosować jakieś inne praktyki, albo czyścić pamięć?

Pytałem już na jednym staroświeckim forum C++, które wyskoczyło jakie pierwsze, ale specjaliści od ANSI C z tamtego portalu mnie zlali ciepłym moczem.

Wytłumaczy ktoś rodakowi łopatologicznie? Odwdzięczę się 50 plusami pod różnymi postami, jak ktoś chce innej zapłaty to niech pisze na priv, poświadczę usługi jakiej trzeba

0

@newbie791:
Rozważ ten kod i zaobserwuj problem.

#include <iostream>


class KlasaJeden
{
public:
	KlasaJeden()
	{
		std::cout << "KlasaJeden\n";
	}
	~KlasaJeden()
	{
		std::cout << "KlasaJeden destrutkor\n";
	}
};

class KlasaDwa
{
private:
	std::unique_ptr<KlasaJeden> uniPtr;
	KlasaJeden* ptr;
public:
	KlasaDwa()
	{
		uniPtr = std::make_unique<KlasaJeden>();
		ptr = new KlasaJeden();
	}
};

int main()
{
	{
		KlasaDwa klasa = KlasaDwa();
	}
	std::cout << "Koniec programu\n";
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1