In der Kompilierzeit habe ich das folgende Problem, wie man das kompilieren, weil konzeptionell für mich es richtig ist, sind alle Vorschläge zum Refactoring willkommen.Umgehen Sie einen Vorlage Fehler mit einem privaten Destruktor
Ich habe einen Kompilierfehler, weil Destruktor "Suche" privat ist, aber ich lösche nicht auf einem Suchzeiger, da ich einen benutzerdefinierten Deleter in der Initialisierung der Basisklasse zur Verfügung gestellt habe. Ich weiß, dass der Compiler das nicht weiß, wie man es umgehen kann.
Fehlerbeschreibung: Fehler C2248: kann nicht privat Mitglied in der Klasse deklariert zugreifen 'Suche' Compiler erzeugt hat 'Suchen :: ~ Search' hier
class Search
{
public:
static Search* New(/* */); // using a pool of already allocated objects to avoid expensive allocations
static void Delete(Search*);
private:
Search(/* */) {/* */}
~Search() {/* */}
};
template<class T>
class MyList
{
public:
typedef (*CustomDeleter) (T* pElement);
MyList(CustomDeleter lpfnDeleter = NULL) {};
void Empty()
{
for (/**/)
{
if (m_pList[m_nListLastUsed])
{
if (m_lpfnCustomDeleter == NULL)
delete m_pList[m_nListLastUsed]; // COMPILE ERROR HERE BECAUSE Search destructor is private BUT I won't use that instruction since
// I provided a custom Deletern I know that the compiler doesn't know that, how to bypass it
else
m_lpfnCustomDeleter(m_pList[m_nListLastUsed]);
}
}
}
private:
T** m_pList;
CustomDeleter m_lpfnCustomDeleter; // Pointer to a custom deleter
};
class Query : public MyList<Search>
{
public:
Query() : MyList<Search>(&Search::Delete) // I set a custom deleter since Search hides its destructor : is this the right way ?
{}
~Query()
{
/****/
Empty(); // PROBLEM HERE
/***/
}
};
@Holt, weil ich Suchobjekte nicht löschen möchte, möchte ich sie in Lock Free Stack speichern (nach der Reinigung), um später mit New – Aminos
verwendet zu werden, nur weil Sie nicht denken, dass Sie * Anruf * Der Code bedeutet nicht * ungültig * Code kann immer noch existieren. 'delete m_pList [m_nListLastUsed]; 'erwartet einen ordnungsgemäß verfügbaren Destruktor, den Sie nicht zur Verfügung gestellt haben. Somit ist der Code nicht gültig, also dein Fehler. Ich müsste einen Moment darüber nachdenken, ob das mögliche Alternativen hat. – WhozCraig
'm_pList' ist nirgendwo definiert. Bitte posten Sie einen [MCVE] (http://stackoverflow.com/help/mcve) –