में रेखांकित किया जाता है, मुझे एक अजीब समस्या दिखाई दे रही है जहां सदस्य विधियों को रेखांकित नहीं किया जा रहा है यदि मैं विनाशक को परिभाषित करता हूं।एक विनाशक को परिभाषित करने से सदस्य कार्यों को
उदाहरण कोड:
#include <cstdio>
class Foo
{
public:
Foo(int arg) : data(arg) {}
~Foo(void) {}
Foo bar(void) const { return Foo(7); }
int data;
};
int main(void)
{
Foo a(3);
Foo b = a.bar();
printf ("%i", b.data);
}
डिफ़ॉल्ट नाशक का उपयोग कर रहे हैं, तो मैं कुछ इस तरह मिलती है:
main:
sub rsp,28h
lea rcx,[string "%i" (013FB8ADA0h)]
mov edx,7
call printf (013FB81068h)
xor eax,eax
add rsp,28h
ret
लेकिन अगर मैं उपरोक्त कोड में के रूप में अपने खुद के खाली नाशक परिभाषित करते हैं,:
Foo::bar:
mov dword ptr [rdx],7
mov rax,rdx
ret
main:
sub rsp,28h
lea rdx,[b]
call Foo::bar (013FA11000h)
mov edx,dword ptr [b]
lea rcx,[string "%i" (013FA1ADA0h)]
call printf (013FA11088h)
xor eax,eax
add rsp,28h
ret
विजुअल स्टूडियो 2012 (v110) का उपयोग करके रिलीज बिल्ड के रूप में संकलित, हालांकि विजुअल स्टूडियो की भी कोशिश की 2010 (v100)। मैंने किसी भी भाग्य के साथ विधि को इनलाइन करने के लिए इसे मनाने में मदद करने के लिए सेटिंग/ओबी 2 की कोशिश की।
मैं असेंबली के साथ पर्याप्त परिचित नहीं हूं कि यह जानने के लिए कि वह क्या करने की कोशिश कर रहा है, शायद कल मैं इसे देखने के लिए इसे समझने की कोशिश करूंगा यदि कोई संकेत देता है। क्या किसी ने कोई प्रकाश डाला है कि एक खाली विनाशक को परिभाषित करने से विधि को रेखांकित किया जा सकता है?
संपादित करें [17/11/2012]मैंने उपरोक्त कोड को अधिक सरल (मूल रूप से मैं अपने वेक्टर वर्ग पर काम कर रहा था) अपडेट किया।
किसी सदस्य विधि से एक आदिम प्रकार को लौटने से लगता है कि यह सही ढंग से रेखांकित हो रहा है, यह केवल एक मुद्दा है जब मैं अपनी कक्षा का उदाहरण देता हूं।
मेरा समाधान सहायक था? –