Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Looks funny, do funny stuff... Can be usefull! ( ili ti, do sada ne vidoh ovu konstrukciju )

[es] :: C/C++ programiranje :: Looks funny, do funny stuff... Can be usefull! ( ili ti, do sada ne vidoh ovu konstrukciju )

[ Pregleda: 2991 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.234.*

ICQ: 208550327


+14 Profil

icon Looks funny, do funny stuff... Can be usefull! ( ili ti, do sada ne vidoh ovu konstrukciju )22.11.2007. u 01:13 - pre 200 meseci
Code:


#include <iostream>

using namespace std;

class A
{
public:
    void PrintMe()
    {
        cout << "Blaa??" << endl;
    }
};

void main()
{
    A * a = new A;

    new (&a[1]) A;       // navodno, "ovo poziva konstruktor"
    new (&a[2]) A;      

    for(int i=0;i<3;i++)
        a[i].PrintMe();
}



Ovo je inace iz DXUT koda DirectX 9...

Cini mi se da radi po sistemu realokacije... U glavnom, veoma zanimljivo i radi!!!
EOF
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
218.1.28.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Looks funny, do funny stuff... Can be usefull! ( ili ti, do sada ne vidoh ovu konstrukciju )22.11.2007. u 08:50 - pre 200 meseci
Ovo je placement new, koji konstruiše objekat na adresi koju mu proslediš, ne alocira svoju memoriju.
I kad smo kod toga, &a[1] nije validna memorija, alocirao si samo jednu instancu klase a ne niz, ako radi - radi slučajno.
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.114.*



+7 Profil

icon Re: Looks funny, do funny stuff... Can be usefull! ( ili ti, do sada ne vidoh ovu konstrukciju )06.12.2007. u 21:06 - pre 199 meseci
Radi i ovo , bez new (MinGW i MS VC++)
Code:

#include <iostream>
using namespace std;

class A
{
public:
    void PrintMe()
    {
        cout << "Blaa??" << endl;
    }
};

int main()
{
    A *a = 0;

    a->PrintMe();
    cout << endl;

    for(int i = 0;i < 3;i++)
    {
        a[i].PrintMe();
        cout << &a[i] << endl;
    }
    cout << endl;
    return 0;
}

 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.234.*

ICQ: 208550327


+14 Profil

icon Re: Looks funny, do funny stuff... Can be usefull! ( ili ti, do sada ne vidoh ovu konstrukciju )06.12.2007. u 21:26 - pre 199 meseci
hmm... duhovi? :P

Jednostavno, adresa od a = 0x00000000...

new, u sustini, samo 'nadje' memorijsku lokaciju koja je u trenutku pogodna za smestanje podataka...

U ovom slucaju smatra da je a velicine 1 bajt iako klasa nema podataka... Ubacimo jedan 'int a' u klasu... :)

Veoma zanimljivo...
EOF
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
195.252.105.*



+7 Profil

icon Re: Looks funny, do funny stuff... Can be usefull! ( ili ti, do sada ne vidoh ovu konstrukciju )07.12.2007. u 00:30 - pre 199 meseci
Kad ubacimo int u klasu pointer je 4 bajta.
Ali radi ok
new i alocira memoriju na adresi. Npr nemozemo da stavimo a->a=1; pre new
Code:

#include <iostream>
using namespace std;

class A
{
public:
    int a;
    A()
    {
        a = 0;
    }
    void PrintMe()
    {
        cout << "Blaa??" << endl;
    }
};

int main()
{
    A *a = (A*)0x330000; // ako je slobodna

    a->PrintMe();
    cout << endl;

    cout << a << endl;
    a++;
    cout << a << endl;
    a++;
    cout << a << endl;

    cout << endl;

    int i;
    for( i = 0;i < 3;i++)
    {
        a[i].PrintMe();
        cout << &a[i] << endl;
    }
    cout << endl;

    A *aa=new A[3]; // konstuktor je prvi put pozvan ovde
    for( i = 0;i < 3;i++)
    {
        aa[i].PrintMe();
        cout << &aa[i] << endl;
    }
    delete [] aa;
    cout << endl;
    return 0;
}



[Ovu poruku je menjao Eurora3D Team dana 07.12.2007. u 01:42 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: Looks funny, do funny stuff... Can be usefull! ( ili ti, do sada ne vidoh ovu konstrukciju )

[ Pregleda: 2991 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.