auto_ptr أو shared_ptr ما يعادلها في الطبقات C ++ / CLI تمكن

StackOverflow https://stackoverflow.com/questions/176403

سؤال

في 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 تم توثيقه هنا . أنا لا أعرف ما هو عليه الدولة أو ما استخدامه قد يكون بالنسبة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top