Overriding a unique_ptr – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Overriding a unique_ptr – C / C++ – Fórum – Programujte.comOverriding a unique_ptr – C / C++ – Fórum – Programujte.com

 

vitamin+8
Grafoman
24. 9. 2012   #1
-
0
-

Mám nasledovný program:

#include <iostream>
#include <memory>
using namespace std;

class B{
	protected:
		B(){cout << "B\n";}
	public:
		typedef unique_ptr<B> uptr_t;
		
		template <typename... Args>
		inline static uptr_t New(Args... args){return uptr_t(new B(args...)); }
	
		virtual B*	vfnc1(){
			cout << "B::vfnc1()\n";
			return new B();
			}
		virtual uptr_t vfnc2(){
			cout << "B::vfnc2()\n";
			return uptr_t(new B());
			}
		
		virtual ~B(){cout << "~B\n";}
};

class D : public B{
	private:
		D(){cout << "D\n";}
	public:
	
		typedef unique_ptr<D> uptr_t;
	
		template <typename... Args>
		inline static uptr_t New(Args... args){return uptr_t(new D(args...)); }
	
		virtual D*	vfnc1(){
			cout << "D::vfnc1()\n";
			return new D();
			}
		virtual uptr_t vfnc2(){	/* Funkcia nemôže prekryt funkciu B::vfnc2()*/
			cout << "D::vfnc()\n";
			return uptr_t(new D());
			}

		virtual ~D(){cout << "~D\n";}
};

int main(){
	B* b1;
	B::uptr_t b2 = D::New();
	
	b1 = b2->vfnc1();
	
	b2 = b2->vfnc2();
}

Keď vracajú metódy vfnc1() obyčajný pointer tak sa môžu prekryť, samozrejme keď vraciam funkciami vfnc2() unique_ptr tak sa metódy nemôžu prekryť. Je nejaký spôsob ako to obísť alebo jednoducho vyriešiť? 

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 65 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý