Pergunta

Em C ++ / CLI, você pode usar tipos nativos em uma classe gerida por ele não é permitido segurar um membro de uma classe nativa em uma classe gerenciada:. Você precisa usar ponteiros nesse caso

Aqui está um exemplo:

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 !

};

Alguém sabe de um equivalente de shared_ptr em C ++ / mundo do CLI?

Edit: Obrigado por sua sugestão, "1800 Informação". Seguindo sua sugestão, eu verifiquei sobre STL.Net mas só está disponível com o Visual Studio 2008 e fornece contentores + algoritmos, mas não ponteiros inteligentes.

Foi útil?

Solução

Eu encontrei a resposta em codeproject :

Nishant Sivakumar postou um artigo sobre isso em http://www.codeproject.com /KB/mcpp/CAutoNativePtr.aspx

Nesta página, também olhar para o comentário de Denis N. Shevchenko:. Ele fornece uma stl-like implementação que funciona muito bem

Outras dicas

Eu não exaustivamente testado este mas como sobre algo como o seguinte:

#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();
    }
};

Isso deve permitem que você use shared_ptrs C ++ 11 / Boost interchangebly nas aulas de ref.

STL.Net está documentado aqui . Eu não sei em que estado ele está em ou o que usá-lo pode ser para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top