मेरे पास एक ऐसा फ़ंक्शन है जो वर्तमान जीएमटी/यूटीसी दिनांक और समय स्ट्रिंग (live example) उत्पन्न करने के लिए बूस्ट.डेटाइम लाइब्रेरी का उपयोग करता है।पहलू को हटाने के लिए कौन जिम्मेदार है?
std::string get_curr_date() {
auto date = boost::date_time::second_clock<boost::posix_time::ptime>::universal_time();
boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT");
std::ostringstream os;
os.imbue(std::locale(os.getloc(), facet));
os << date;
return os.str();
}
यह ज्यादातर Boost.DateTime's example पर आधारित है:
//example to customize output to be "LongWeekday LongMonthname day, year"
// "%A %b %d, %Y"
date d(2005,Jun,25);
date_facet* facet(new date_facet("%A %B %d, %Y"));
std::cout.imbue(std::locale(std::cout.getloc(), facet));
std::cout << d << std::endl;
// "Saturday June 25, 2005"
मेरे कोड अच्छी तरह से काम किया है, लेकिन अब मैं इन विशेष लाइनों new
युक्त की वजह से असहज महसूस कर रहा हूँ:
boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT");
date_facet* facet(new date_facet("%A %B %d, %Y"));
जैसा कि आप देख सकते हैं, वहाँ है में कोई delete
Boost.DateTime की तो मैं किसी भी तरह मान लिया यह मेरे लिए delete
date_facet
लिए जरूरी है कि। मैंने new
एड time_facet
ऑब्जेक्ट को लपेटने के लिए std::unique_ptr
का उपयोग किया।
std::unique_ptr<boost::posix_time::time_facet> facet(new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT"));
हालांकि, मैं segfault त्रुटियों हो रही है, जैसा कि आप here में देख सकते हैं। मैंने मैन्युअल रूप से delete
new
एड पॉइंटर में भी कोशिश की है, और मुझे अभी भी वही त्रुटियां मिल रही हैं (क्षमा करें, कोलिरु में त्रुटि पुन: उत्पन्न नहीं कर सकती)।
time_facet
पॉइंटर std::locale
ऑब्जेक्ट का निर्माण करते समय तर्क के रूप में पारित किया जाता है, इसलिए मैं उलझन में हूं कि delete
पहलू में कौन जिम्मेदार है।
मेरे सवाल की मूल है:
- मैं
delete
time_facet
करना आवश्यक है याstd::locale
वस्तुdelete
यह ing के लिए कौन जिम्मेदार है?
कृपया ध्यान दें कि boost::posix_time::time_facet
boost::date_time::date_facet
जो है, बारी में, std::locale::facet
से प्राप्त से ली गई है। यह प्रश्न std::locale::facet
पर सामान्यीकृत हो सकता है, हालांकि मेरी समस्या time_facet
पर विशिष्ट है।
यहाँ std::locale
के निर्माताओं पर कुछ डॉक्स हैं:
इसका मतलब है कि लोकेल को 'स्थिर स्थिर' घोषित नहीं किया जा सकता है? – agodinhost