• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja tworząca obiekt

0 głosów
355 wizyt
pytanie zadane 13 maja 2020 w C i C++ przez Jakub Michalik Użytkownik (850 p.)

Witam, mam problem z utworzeniem funkcji odpowiedzialnej za pojawianie się nowych obiektów. Podpowiedział by ktoś jak mam to zrobić i w czym popełniam błąd. (W przyszłości chciałbym zrobić tak aby można było usuwać obiekt np za pomocą delete w funkcji main)

Oto co mam w kodzie:

#include <iostream>
#include "Klasa.h"

using namespace std;


Klasa utworzObjekt()
{
	Klasa nowy;
	return nowy;
}

int main()
{
	cout << "Funkcja tworzaca klase" << endl;

	Klasa objekt = utworzObjekt();

	//cout << objekt.getLiczba << endl;

	return 0;
}

#NaukaProgramowaniaWDomu

komentarz 13 maja 2020 przez adrian17 Ekspert (320,700 p.)

Ten kod wygląda dla mnie dobrze (choć nie pokazałeś pliku .h).

i w czym popełniam błąd

Więc nie wiem jaki błąd masz na myśli.

W przyszłości chciałbym zrobić tak aby można było usuwać obiekt np za pomocą delete w funkcji main

Ale nie trzeba, jeśli to jest zwykły obiekt na stosie. `delete`, tam gdzie jest potrzebne to nie jest "super że można", tylko "niestety trzeba" :P

komentarz 14 maja 2020 przez Oscar Nałogowiec (25,670 p.)

@Jakub Michalik,
 Aby taki kod dobrze działał musisz zdefiniować poprawny konstruktor kopiujący i operator przypisania dla twojej Klasy.

komentarz 14 maja 2020 przez j23 Mędrzec (175,020 p.)

Z tym "musisz" nie byłbym taki pewny. Bez definicji klasy lub treści błędu to może być równie dobrze brak średnika na końcu definicji klasy.

2 odpowiedzi

0 głosów
odpowiedź 13 maja 2020 przez Jacob99 Obywatel (1,840 p.)
wybrane 21 maja 2020 przez Jakub Michalik
 
Najlepsza

Żeby utworzyć obiekt musisz wywołać konstruktor, więc twoja funkcja powinna wyglądać tak:

Klasa utworzObiekt() {
    return Klasa();
}

PS. dobrym nawykiem jest używanie języka angielskiego w kodzie i (w przypadku C++) powszechną konwencją jest używanie snake_case'a do nazywania zmiennych i funkcji. Stosując się do tego, twój kod powinien wyglądać mniej więcej tak:

Klasa create_object() {
    return Klasa();
}

2. Jeśli koniecznie chcesz samodzielnie usuwać obiekt utworzony przez tę funkcję, to musisz zaalokować ten obiekt na stercie i operować na wskaźnikach, ale pamiętaj, że narażasz się na wiele błędów związanych z ręcznym zarządzaniem pamięcią np. wycieki pamięci albo podwójne zwolnienie pamięci.

Klasa* create_object() {
    return new Klasa();
}

int main() {
//...
auto obj = create_object();
//...
delete obj;
// Dobry nawyk, który wielokrotnie uratuje ci tyłek
// przy ręcznym zarządzaniu pamięcią
obj = nullptr;

return 0;
}

 

komentarz 14 maja 2020 przez adrian17 Ekspert (320,700 p.)

Żeby utworzyć obiekt musisz wywołać konstruktor, więc twoja funkcja powinna wyglądać tak:

    return Klasa();

Nie, ten kod jest jak najbardziej poprawny.

    Klasa nowy;
    return nowy;

A co do

// Dobry nawyk, który wielokrotnie uratuje ci tyłek
// przy ręcznym zarządzaniu pamięcią
obj = nullptr;

jeszcze lepszym nawykiem jest testowanie programu z instrumentacją jak AddressSanitizer, zamiast polegać na "zerowaniu" martwych zmiennych ;)

komentarz 14 maja 2020 przez j23 Mędrzec (175,020 p.)
A najlepszym nawykiem jest używanie smart pointerów, wtedy nic nie trzeba zerować czy testować sanitizerami ;)
0 głosów
odpowiedź 13 maja 2020 przez Ajqs Obywatel (1,360 p.)
Rozumiem zamysł ale po co się w taki sposób tym bawić? Nie lepiej tworzyć obiekt tak jak przystało? Rozpisz co chciałbyś tym osiągnąć to może zrozumiem jaki jest twój zamysł.

Podobne pytania

0 głosów
1 odpowiedź 47 wizyt
pytanie zadane 5 grudnia 2021 w JavaScript przez TOWaD Bywalec (2,900 p.)
0 głosów
6 odpowiedzi 1,493 wizyt
0 głosów
2 odpowiedzi 135 wizyt

88,330 zapytań

136,924 odpowiedzi

305,591 komentarzy

58,601 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...