में स्टैक-आधारित ऑब्जेक्ट इंस्टेंटेशन मैं डी सीख रहा हूं, और मुझे जो त्रुटि मिल रही है, उससे उलझन में हूं।डी
module helloworld;
import std.stdio;
import std.perf;
ptrdiff_t main(string[] args)
{
auto t = new PerformanceCounter; //From managed heap
//PerformanceCounter t; //On the stack
t.start();
writeln("Hello, ", size_t.sizeof * 8, "-bit world!");
t.stop();
writeln("Elapsed time: ", t.microseconds, " \xb5s.");
return 0;
} //main()
एक पूरी तरह से सम्मानजनक पैदावार:
Hello, 32-bit world!
Elapsed time: 218 µs.
अब विचार करना क्या जब मैं बजाय प्रबंधित ढेर का उपयोग कर के ढेर पर PerformanceCounter प्रारंभ करने का प्रयास होता है:
निम्नलिखित पर विचार करें
//auto t = new PerformanceCounter; //From managed heap
PerformanceCounter t; //On the stack
उपज:
--- killed by signal 10
मैं स्टंप हो गया हूं। कोई विचार क्यों यह टूटता है? (मैक ओएस एक्स 10.6.4 पर डीएमडी 2.049)। एन 00 बी की मदद के लिए अग्रिम धन्यवाद।
सुराग के लिए धन्यवाद !! :) (यह समझ में आता है और यह भी जवाब देता है कि ऑब्जेक्ट डिफरेंस/सदस्य ऑपरेटर (->) की आवश्यकता क्यों नहीं है। – anoncow
ठीक है, -> ऑपरेटर को वैसे भी आवश्यक नहीं होगा - उदाहरण के लिए, सी में, कंपाइलर (यदि स्मार्ट पर्याप्त) वास्तव में आपको चेतावनी दे सकता है कि आप गलत ऑपरेटर का उपयोग कर रहे हैं। इसी तरह, डी के पॉइंटर्स (कहें, Foo *) की आवश्यकता नहीं है ->, लेकिन डॉट के साथ काम करें: 'Foo * foo =; foo.bar = 5; ' –
क्षमा करें, मैं गतिशील रूप से आवंटित ऑब्जेक्ट के लिए इसकी आवश्यकता नहीं कर रहा था, न कि स्टैक-आधारित एक। – anoncow