Stellen Sie sicher, dass die abstrakte Bass-Klasse ein shared_ptr ist

8

Ich habe eine abstrakte Basisklasse:

%Vor%

Der einzige gültige Anwendungsfall für Base ist das Leben in shared_ptr - bar ist eine wichtige Methode. Wie kann ich sicherstellen, dass Folgendes unmöglich ist:

%Vor%     
Barry 16.04.2015, 19:05
quelle

2 Antworten

5

Eine Technik besteht darin, den Konstruktor von Base private und friend zu einer Factory-Klasse oder -Methode zu machen:

%Vor%

Verwendung:

%Vor%

Dies erfordert, dass Sie alle vorhandenen abgeleiteten Klassen neu schreiben müssen.

    
ecatmur 16.04.2015, 19:45
quelle
0

Ausgehend von ecatmurs Antwort könnten wir auch Base constructible aus einem Typ machen, der nur einen privaten Konstruktor hat :

%Vor%

Jeder Derived -Typ muss ein zusätzliches Konstruktorargument vom Typ PrivateT haben, das er weiterleiten muss ... aber er kann trotzdem von Base ! erben!

%Vor%     
Barry 17.04.2015 16:17
quelle

Tags und Links