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 !
};
لا أحد يعرف من أي ما يعادل shared_ptr في C ++ / CLI العالم؟
وتحرير: شكرا على اقتراحك، "1800 معلومات". وبعد اقتراحكم، راجعت حول STL.Net ولكنها متاحة فقط مع Visual Studio 2008، وأنها توفر حاويات + الخوارزميات، ولكن لا مؤشرات الذكية.
المحلول
ولقد وجدت الإجابة على codeproject :
شاركونيشانت سيفاكومار مقالا عن هذا في http://www.codeproject.com /KB/mcpp/CAutoNativePtr.aspx
في هذه الصفحة، أن ننظر أيضا للتعليق دينيس N. شيفتشينكو: انه يوفر تنفيذ مثل المحكمة الخاصة بلبنان التي تعمل بشكل جيد جدا
نصائح أخرى
وأنا لم تختبر تماما هذا ولكن ماذا عن شيء كما يلي:
#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();
}
};
وهذا يجب أن تتيح لك استخدام shared_ptrs C ++ 11 / دفعة وinterchangebly في فصول المرجع.
STL.Net تم توثيقه هنا . أنا لا أعرف ما هو عليه الدولة أو ما استخدامه قد يكون بالنسبة لك.