AUTO_PTR 또는 SHARED_PTR 관리 C ++/CLI 클래스에서 동등합니다.
-
05-07-2019 - |
문제
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은 여기에 문서화되어 있습니다. 나는 그것이 어떤 상태인지 또는 당신에게 어떤 사용이 필요한지 모르겠습니다.
제휴하지 않습니다 StackOverflow