Frage

In C++/CLI , können Sie mit nativen Typen in einer verwalteten Klasse, es ist nicht erlaubt zu halten, ein Mitglied des native-Klasse in der managed Klasse :müssen Sie Zeiger verwenden in diesem Fall.

Hier ist ein Beispiel :

class NativeClass
{
....
};


public ref class ManagedClass
{
private:
  NativeClass mNativeClass; // Not allowed !

  NativeClass * mNativeClass; // OK

  auto_ptr<NativeClass> mNativeClass; //Not allowed !
  boost::shared_ptr<NativeClass> mNativeClass; //Not allowed !

};

Kennt jemand ein äquivalent von shared_ptr in der C++/CLI Welt?

Edit:Vielen Dank für Ihren Vorschlag, "1800-Informationen".Nach deinem Vorschlag habe ich überprüft STL.Net aber es ist nur verfügbar, Visual Studio 2008, und es stellt Container + algorithmen, aber keine intelligenten Zeiger.

War es hilfreich?

Lösung

fand ich die Antwort auf Codeproject :

Nishant Sivakumar veröffentlicht einen Artikel über diese unter http://www.codeproject.com /KB/mcpp/CAutoNativePtr.aspx

Auf dieser Seite sieht auch für den Kommentar von Denis N. Shevchenko. Er bietet eine stl artige Implementierung, die recht gut funktioniert

Andere Tipps

Ich habe nicht gründlich getestet dies aber wie wäre es so etwas wie die folgenden:

#pragma once

#include <memory>

template <class T>
public ref class m_shared_ptr sealed
{
    std::shared_ptr<T>* pPtr;

public:
    m_shared_ptr() 
        : pPtr(nullptr) 
    {}

    m_shared_ptr(T* t) {
        pPtr = new std::shared_ptr<T>(t);
    }

    m_shared_ptr(std::shared_ptr<T> t) {
        pPtr = new std::shared_ptr<T>(t);
    }

    m_shared_ptr(const m_shared_ptr<T>% t) {
        pPtr = new std::shared_ptr<T>(*t.pPtr);
    }

    !m_shared_ptr() {
        delete pPtr;
    }

    ~m_shared_ptr() {
    delete pPtr;
    }

    operator std::shared_ptr<T>() {
        return *pPtr;
    }

    m_shared_ptr<T>% operator=(T* ptr) {
        pPtr = new std::shared_ptr<T>(ptr);
        return *this;
    }

    T* operator->() {
        return (*pPtr).get();
    }
};

Das sollten Sie 11 ++ / shared_ptrs die Boost-C verwenden lassen interchangebly in ref Klassen.

STL.Net ist hier dokumentiert.Ich weiß nicht, in welchem Zustand Sie ist oder welchen nutzen könnte es für Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top