문제

C ++/CLI에서 관리 클래스에서 기본 유형을 사용할 수 있습니다.

예는 다음과 같습니다.

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 !

};

C ++/CLI 세계에서 Shared_ptr에 해당하는 사람이 있습니까?

편집 : 제안 해주셔서 감사합니다. "1800 정보". 귀하의 제안에 따라 STL.NET에 대해 확인했지만 Visual Studio 2008에서만 사용할 수 있으며 컨테이너 + 알고리즘을 제공하지만 스마트 포인터는 없습니다.

도움이 되었습니까?

해결책

나는 답을 찾았다 CodeProject :

Nishant Sivakumar는 이것에 관한 기사를 게시했습니다 http://www.codeproject.com/kb/mcpp/cautonativeptr.aspx

이 페이지에서 Denis N. Shevchenko의 의견을 찾으십시오. 그는 매우 잘 작동하는 STL과 같은 구현을 제공합니다.

다른 팁

나는 이것을 철저히 테스트하지 않았지만 다음과 같은 것은 어떻습니까?

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

이를 통해 C ++ 11/Boost의 Shared_ptrs를 Ref 클래스에서 교환 할 수 있습니다.

stl.net은 여기에 문서화되어 있습니다. 나는 그것이 어떤 상태인지 또는 당신에게 어떤 사용이 필요한지 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top