Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Βαλε αυτα και θα δουλευει.


	Label(const Label<T>& other)
	{
		*this = other;
	}
	Label<T>& operator = (const Label<T>& other)
	{
		size = other.size;
		ptr = new T[size];
		memcpy(criteria,other.criteria, sizeof(T) * size);
		return *this;
	}

Βαλε αυτα και θα πεταει

	Label(Label<T>&& other)
	{
		*this = std::move(other);
	}
	Label<T>& operator = (Label<T>&& other)
	{
		if(this != &other)
		{
			size = other.size;
			criteria= other.criteria;
			other.size = 0;
			other.criteria = 0;
		}
		return *this;
	}
  • Like 1
Δημοσ.
  Στις 15/7/2013 στις 12:09 ΜΜ, bnvdarklord είπε

Αν είχα βαλει θα δουλευε στο αρχικο παράδειγμα; Και εφόσον δουλευει με pointers γιατι εχω πρόβλημα που ειπες;

 

Γιατι... Ας πουμε εχεις ενα label x και κανεις το παρακατω (το οποιο γινεται πολλες φορες μεσα στους container)

 

Label<int> y = x;

 

To y τι ειναι; Ειναι copy; οχι εφοσον εχουν το ιδιο resource (το creatiareadsadasd οπως γραφεται τεσπα)

ειναι ενα reference; οχι, το y εχει αλλο life time απο αυτο του x

Αρα ειναι ενα... δεν ξερω τι  :-)

  • Like 1
Δημοσ.

το criteria, ξεχασα να το αλλαξω. Τους operators τους εγραψα πριν καμια ωρα σε μια κλαση που υποθετικα θα ηταν σαν τη δικη σου. Που ναι ηταν χαχα

 

 

  Εμφάνιση κρυμμένου περιεχομένου

 

Δημοσ.

Το δοκίμασα και δουλευει, σ'ευχαριστώ πολυ!

 

Μια τελευταια απορία. Τα 2 πάνω που που εγραψες ειναι τα copy constructor και operator και τα 2 κατω(που ειπες θα πεταει) ειναι τα move;

 Στα copy αντιγράφεις ενα αντικειμενο στο άλλο, στο move τι κανεις;  Το std::move δεν το χω ξαναδει.

Δημοσ.

copy

T::T(const T& other)

T::operator= (const T& other)

 

move

T::T(T&& other)

T::operator= (T&& other)

 

 

Στο move μετακινεις το αντικειμενο

πχ T x = *std::move(y)   (το move απλα κανει typecast σε rval reference για νακαλεσει το move assingment και οχι το copy)

οπου x ειναι το παλιο y και οπου y ειναι ενα τιποτα dead παπαλα καπουτ

 

Το move ειναι παρα πολυ καλο σε τετοιες περιπτωσεις (δηλαδη με vectors κλπ) διοτι αποφευγεις τα duplicate (τα οποια ειναι παρα πολλα)

  • Like 1
Δημοσ.

Επίσης μία παρατήρηση, το 

template <typename T> bool Label<T>::operator <(const Label<T> &other) const
{
  return !(*this > other);
}

είναι λάθος.

 

Αν δεν είναι μεγαλύτερο δεν σημαίνει ότι είναι μικρότερο. Μπορεί απλά να είναι ίσο.

 

Αν δεν θέλεις να γράψεις όλη τη σύγκριση για το μικρότερο απλά έλεγξε και την ισότητα.

template <typename T> bool Label<T>::operator <(const Label<T> &other) const
{
  return !( (*this > other) || (*this == other) );
}
  • Like 1
Δημοσ.
  Στις 22/7/2013 στις 10:31 ΠΜ, MitsakosGR είπε

 

Επίσης μία παρατήρηση

 

 

Ναι, ευχαριστώ το εχω διορθώσει απλα δεν αλλαξα το αρχικο post.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...