Hejsan! Såg att jag hade råkat skriva lite fel i texten som jag nu ändrade. Hoppas att det inte gjorde så mycket. Vilken idiot jag var, jag hade ju skrivit hej då i kopierings konstruktorn. Inte alls konstigt då att det blir 3 då ju. Den som kan ta bort tråden får gärna göra det! Såg nu att det blir ännu mer fel. Har jag skrivit någon bugg i koden? För jag får segmenterings fel när jag använder den. Kan inte skriva skriva ut getX() med mera. Fattar absolut ingenting. Du får göra det i mindre steg. Problemet är förmodligen att du inte har implementerat en egen kopieringskonstruktor. Då körs delete på int:arna först och sen försöker du använda dem en gång till. Hejsan Niklas! Nej, det här har du nog missuppfattat lite. Alla variabler destrueras när de går "ur scope" (slutet av den {} de är definierade i). Det enda som inte destrueras är minne man har begärt från datorn via "new". Okej, det visste jag inte. Men då har jag inga problem länge, tack Niklas!Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara anropa
Jag kör koden nedan:
<code>
class Point {
private:
int *x, *y;
public:
Point(int ax = 0, int ay = 0);
Point(const Point & a);
~Point();
int getX() const { return *x; }
int getY() const { return *y; }
};
inline Point::Point(int ax, int ay){
std::cout << "hejsan\n";
x = new int;
y = new int;
*x = ax;
*y = ay;
}
inline Point::Point(const Point & a){
std::cout << "hejsan\n";
Point(a.getX(),a.getY());
}
inline Point::~Point(){
std::cout << "hejdå\n";
delete x;
delete y;
}
int main(int argc, char *argv[])
{
std::vector<Point> muh;
muh.push_back(Point(10,10));
}
</code>
Detta blir resultatet:
<code>
hejsan
hejsan
hejsan
hejdå
hejdå
hejdå
</code>
Varför blir konstruktorn anropad 3 gånger? Via mig ska den nämligen bara bli anropad 2 gånger, inte 3. Förstår inte det, kan någon vara snäll och förklara varför det blir så? Är det någon skillnad i Windows, jag använder nämligen openSUSE.
Tack på förhand!Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara anropa
Sv: Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an
Sv:Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an
<code>
#include <iostream>
#include <vector>
class Point {
private:
int *x, *y;
public:
Point(int ax = 0, int ay = 0);
Point(const Point & a);
~Point();
int getX() const { return *x; }
int getY() const { return *y; }
};
inline Point::Point(int ax, int ay){
std::cout << "hejsan\n";
x = new int;
y = new int;
*x = ax;
*y = ay;
}
inline Point::Point(const Point & a){
Point(a.getX(),a.getY());
}
inline Point::~Point(){
std::cout << "hejdå\n";
delete x;
delete y;
}
int main(int argc, char *argv[])
{
std::vector<Point> muh;
muh.push_back(Point(99,99));
std::cin.get();
std::cout << muh.at(0).getX();
std::cin.get();
return 0;
}
</code>Sv: Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an
Vad du bör göra är egentligen att inte hålla på och mecka med pekare. Finns det någon anledning till att du gör det nu?Sv:Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an
Jag har implementerat en kopieringskonstruktor, dock inte en tilldelningskonstruktor. Men det blir ingen skillnad. Jag provade det nämligen precis.
Nej faktiskt inte utan jag gör det för att bli bättre. Men om jag skriver en klass så här:
<code>
class X {
public:
int x;
}
</code>
så kommer väl inte minnet för x att raderas om objektets destruktor anropas utan det raderas när programet stängs av? el? Det är just detta jag vill att det ska ske. Förstår du vad jag menar?Sv: Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an
Sv:Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an