2012-05-09 7 views
13

मैं सी में पता ++/CLI एक जब एक प्रबंधित वर्ग को परिभाषित करने अप्रबंधित प्रकार का उपयोग नहीं कर सकते हैं:एक अप्रबंधित संरचना एक प्रबंधित कक्षा का सदस्य क्यों नहीं हो सकती है?

public struct Unmanaged 
{ 
    int x; 
    int y; 
}; 

public ref class Managed 
{ 
    int one; 
    Unmanaged two; //error C4368 
}; 

मैं क्यों हालांकि समझ में नहीं आता। Unmanaged केवल देशी प्रकारों का संग्रह है - इसका आकार ज्ञात है, निश्चित रूप से यह (और इसके द्वारा मेरा मतलब है कि स्मृति को अवरुद्ध करने वाला ब्लॉक) इसे 'स्मृति के ब्लॉक' के साथ ले जाया जाएगा जो 'प्रबंधित ढेर' के अंदर Managed है , और जो भी ऑफसेट मेटाडेटा में संग्रहीत किया जाता है वह वैध रहेगा, नहीं? जैसे कि एक पूर्णांक या एक फ्लोट घोषित किया गया था?

क्यों हम प्रकारों को मिश्रित नहीं कर सकते?

+0

आप इस तरह के एक प्रश्न को अधिकृत रूप से उत्तर देने में सक्षम होने की उम्मीद करते हैं? – ildjarn

+0

@ildjarn अच्छी तरह से, मैं सिर्फ सी ++/सीएलआई स्रोत कोड की जांच करने जा रहा था और एक अच्छा जवाब लिख रहा था ... owait –

+1

मुझे डर है कि मुझे यह नहीं मिला; किसी से काम करने वाले सी ++/सीएलआई के बारे में अधिक जानकारी वाला कोई व्यक्ति? कंपाइलर को डिज़ाइन करते समय, किसी को भी यही धारणा होनी चाहिए कि मैं अपनी पोस्ट में दावा करता हूं (या धारणा पूरी तरह से गलत है!), और फिर एहसास हुआ कि कुछ शर्त के लिए यह सच नहीं था, इसलिए त्रुटि - मैं सिर्फ उत्सुक था उस स्थिति के लिए क्या था। ब्लॉग पोस्ट टोनी से जुड़े लिंक में यह समझाया गया था कि प्रबंधित ढेर पर देशी प्रकारों के आवंटन को उन लोगों को 'इंस्टेंस' को अप्रबंधित कोड में वापस करने के लिए pin_ptr का दुरुपयोग करने से रोकने की अनुमति नहीं थी। – sebf

उत्तर

15

मिश्रित प्रकार वास्तव में मिश्रित मेमोरी मॉडल को संदर्भित करता है। अप्रबंधित प्रकार ढेर पर जाते हैं, प्रबंधित प्रकार कचरा एकत्रित ढेर में जाते हैं, इसलिए जब आप किसी प्रबंधित में एक अप्रबंधित प्रकार को एम्बेड करते हैं, तो उसे दोनों ढेर पर स्मृति की आवश्यकता होती है, यही कारण है कि आप इस तरह की चीज को पॉइंटर के साथ करते हैं। पॉइंटर प्रबंधित किया जाता है, जिस मान को इंगित करता है वह नहीं है।

मैं खुद उत्सुक था, इसलिए मैंने अपना Google इकट्ठा किया और पाया।

http://blogs.msdn.com/b/branbray/archive/2005/07/20/441099.aspx

लड़का पता करने के लिए वह किस बारे में बात कर रहा है लगता है।

अच्छा प्रश्न हालांकि ...

+0

उस पोस्ट में कुछ अच्छी जानकारी है, बहुत बहुत धन्यवाद! यह मुझे आश्चर्यचकित करता है कि प्रोग्रामर गलतियों को रोकने के लिए पूरी तरह से कितनी अन्य भाषा विशेषताओं को डिजाइन किया गया है (मैं कम से कम सी # में गिनती हूं; स्विच स्टेटमेंट में मामलों के माध्यम से कोई गिरावट नहीं) – sebf

+1

बहुत सारे और हम, अच्छी तरह से I: D को कई और चाहिए –

संबंधित मुद्दे

 संबंधित मुद्दे