Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara anropa

Postades av 2007-10-22 16:45:31 - Fredrik Olofsson, i forum c++, Tråden har 7 Kommentarer och lästs av 1474 personer

Hejsan!
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!


Svara

Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara anropa

Postades av 2007-10-22 19:56:45 - Fredrik Olofsson

Såg att jag hade råkat skriva lite fel i texten som jag nu ändrade. Hoppas att det inte gjorde så mycket.


Svara

Sv: Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an

Postades av 2007-10-22 21:14:27 - Fredrik Olofsson

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!


Svara

Sv:Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an

Postades av 2007-10-22 21:38:21 - Fredrik Olofsson

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.

<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>


Svara

Sv: Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an

Postades av 2007-10-23 10:26:24 - Niklas Jansson

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.

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?


Svara

Sv:Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an

Postades av 2007-10-23 14:45:36 - Fredrik Olofsson

Hejsan Niklas!
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?


Svara

Sv: Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an

Postades av 2007-10-23 15:34:59 - Niklas Jansson

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".


Svara

Sv:Konstruktorn och destruktorn anropad 3 gånger när dem ska egentligen bara an

Postades av 2007-10-23 15:56:40 - Fredrik Olofsson

Okej, det visste jag inte. Men då har jag inga problem länge, tack Niklas!


Svara

Nyligen

  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 867
27 962
271 767
492
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies