C++ cli 托管C+中的自动或共享ptr等效项+/CLI类

C++ cli 托管C+中的自动或共享ptr等效项+/CLI类,c++-cli,smart-pointers,auto-ptr,C++ Cli,Smart Pointers,Auto Ptr,在C++/CLI中,您可以在托管类中使用本机类型,因为不允许在托管类中保留本机类的成员:在这种情况下,您需要使用指针 以下是一个例子: class NativeClass { .... }; public ref class ManagedClass { private: NativeClass mNativeClass; // Not allowed ! NativeClass * mNativeClass; // OK auto_ptr<NativeClass>

在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 !

};
类NativeClass
{
....
};
公共引用类ManagedClass
{
私人:
NativeClass mNativeClass;//不允许!
NativeClass*mNativeClass;//确定
auto_ptr mNativeClass;//不允许!
boost::shared_ptr mNativeClass;//不允许!
};
有人知道C++/CLI世界中的shared_ptr吗

编辑: 感谢您的建议,“1800信息”。根据您的建议,我查看了STL.Net,但它仅在Visual Studio 2008中可用,它提供了容器+算法,但没有智能指针。

。我不知道它处于什么状态,也不知道它对您有什么用处。

我在以下网站上找到了答案:

Nishant Sivakumar在


在这一页上,还可以看到丹尼斯·舍甫琴科的评论:他提供了一个类似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();
    }
};
#pragma一次
#包括
模板
公共参考类m_共享\u ptr密封
{
std::共享的ptr*pPtr;
公众:
m_共享_ptr()
:pPtr(nullptr)
{}
m_共享_ptr(T*T){
pPtr=新标准::共享ptr(t);
}
m_shared_ptr(标准::shared_ptr t){
pPtr=新标准::共享ptr(t);
}
m_共享\u ptr(常数m_共享\u ptr%t){
pPtr=新标准::共享ptr(*t.pPtr);
}
!m_共享_ptr(){
删除pPtr;
}
~m_共享_ptr(){
删除pPtr;
}
操作员std::共享的_ptr(){
返回*pPtr;
}
m_共享_ptr%运算符=(T*ptr){
pPtr=新标准::共享ptr(ptr);
归还*这个;
}
T*运算符->(){
return(*pPtr.get();
}
};

这应该允许您在ref类中互换使用C++11/Boost的共享\u ptr。

请避免链接,它们可能会被破坏