Avatar billede stigc Nybegynder
01. juli 2004 - 16:44 Der er 9 kommentarer og
2 løsninger

MFC memory

Jeg har en klassevariable af typen CStringArray myArray.
Jeg tilføjer elementer i en funktion. F.eks:

void addElement()
{
  CString test = "test";
  myArray.Add(test);
}

Bliver test kopieret over i arrayet, eller er den en reference?
Avatar billede jpk Nybegynder
01. juli 2004 - 17:15 #1
Teksten bliver kopieret.
Avatar billede stigc Nybegynder
01. juli 2004 - 18:05 #2
Godt så ingen problemer her. Hvad med

CStrign t = "test";
t = "test2";

Hvem ryder op efter den første værdi? CString selv?
Avatar billede stigc Nybegynder
01. juli 2004 - 18:31 #3
Og når den bliver returneret fra en funktioner, bliver den også kopieret her?

CStrint test()
{
  Cstring test = "test";
  return test;
}
Avatar billede arne_v Ekspert
01. juli 2004 - 19:12 #4
re 18:05:06)

Det er CString's = operator som skal håndtere det.

re 01/07-2004 18:31:03)

funktions resultatet returneres ved hjælp af CString copy constructor
og CString's destructor vil blive kaldt på test
Avatar billede stigc Nybegynder
01. juli 2004 - 19:21 #5
Takker, læg du også et svar.
Avatar billede arne_v Ekspert
01. juli 2004 - 19:29 #6
svar
Avatar billede stigc Nybegynder
26. august 2004 - 14:48 #7
Hej Arne.

Er det også sådan med andre MFC objekter. F.eks CTime?
Avatar billede arne_v Ekspert
26. august 2004 - 14:53 #8
Det vil jeg tro - men hvad er konteksten ?
Avatar billede stigc Nybegynder
26. august 2004 - 16:20 #9
CTime test()
{
  CTime test;
  return test;
}
Avatar billede arne_v Ekspert
26. august 2004 - 16:23 #10
Det er helt det samme.

der vil blive kaldt:

constructor for test
copy constructor med test som højre side argument
destructor for test
Avatar billede arne_v Ekspert
26. august 2004 - 16:35 #11
Prøv og kør dette lille eksempel:

#include <iostream>

using namespace std;

class Test
{
  public:
      Test()
      {
        cout << (int)this << " constructed" << endl;
      }
      ~Test()
      {
        cout << (int)this << " destructed" << endl;
      }
      Test(const Test& rhs)
      {
        cout << "copy from " << (int)&rhs << " to " << (int)this << endl;
      }
      void operator=(const Test& rhs)
      {
        cout << "assignment from " << (int)&rhs << " to " << (int)this << endl;
      }
};

Test f()
{
  Test res;
  return res;
}

int main()
{
  Test a;
  a = f();
  return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester