Avatar billede krismort Nybegynder
11. august 2008 - 13:40 Der er 6 kommentarer

Hvilken operator skal være privat ?

Hvilken operator skal være private for at linie 6
ikke skal kunne tillades ?

class Entity {
public:
};
void main() {
  Entity object;
  const Entity& ref = object; // <-- det er ikke tilladt i designet...
}
Avatar billede bertelbrander Novice
11. august 2008 - 19:33 #1
Interessant problem, som jeg dog er lidt bange for at der ikke rigtigt er nogen løsning på :-(

Problemet er at class'en/objektet ikke er involveret når der tages en reference til det.

Hvorfor må brugeren ikke lave referencer til objektet?
Avatar billede krismort Nybegynder
11. august 2008 - 22:35 #2
Jeg vil tvinge dem som bruger en API til at bruge en smart ptr klasse hver gang de tilgår en instans.
Avatar billede bertelbrander Novice
11. august 2008 - 23:51 #3
Man kunne måske indkapsle tilgangen til objektet i smart-pointer-klassen, så andre ikke kan få adgang til objektet direkte, hverken som pointer eller reference.
Avatar billede krismort Nybegynder
13. august 2008 - 11:53 #4
hmm ja det var måske en mulighed
Avatar billede karas Nybegynder
16. august 2008 - 18:09 #5
Kender du til Singleton design? Hvis du sørger for at klassen kun kan instantieres gennem en enkelt funktion, så kan funktionen returnere en smart pointer.

class MyClass
{
  friend class smart_ptr<MyClass>; // In order to access destructor
public:
  static smart_ptr<MyClass> instantiate(/* ... */);

  /* ... */

private:
  MyClass();
  MyClass(const MyClass&);
  MyClass& operator=(const MyClass&);
  ~MyClass();
};

Det forhindrer dog ikke brugeren i at få en reference eller pointer til MyClass gennem smart_ptr<> klassen (som vist er hvad du ønsker).

Hvis brugeren ALDRIG må få en reference eller pointer til din klasse, så er en smart ptr ikke hvad du har brug for. Så har du brug for en Proxy - en klasse som træder i stedet for e.g. MyClass. Hoved formålet med smart ptr's er som regel at sikre sig at instansen bliver deallokeret præcis én gang.
Avatar billede krismort Nybegynder
16. august 2008 - 20:46 #6
formålet med den smartptr klasse som vi bruger er at du ikke kommer til at kalde funktioner på en pointer til et objekt som er nedlagt. En smartptr er jo i forvejen en proxy klasse.
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