আমি প্রাথমিকভাবে এটি কেবল ধ্বংসকারীদের সম্পর্কে একটি প্রশ্ন হিসাবে পোস্ট করেছি তবে এখন আমি ডিফল্ট নির্মাণকারীর বিবেচনা যুক্ত করছি। মূল প্রশ্নটি এখানে:
আমি যদি আমার ক্লাসটিকে এমন একটি ডেস্ট্রাক্টর দিতে চাই যা ভার্চুয়াল, তবে অন্যথায় সংকলকটি যা উত্পন্ন করে, আমি তার ব্যবহার করতে পারি
=default:class Widget { public: virtual ~Widget() = default; };তবে মনে হয় একটি খালি সংজ্ঞা ব্যবহার করে আমি কম টাইপ করে একই প্রভাব পেতে পারি:
class Widget { public: virtual ~Widget() {} };এই দুটি সংজ্ঞা আলাদাভাবে আচরণ করার কোনও উপায় আছে কি?
এই প্রশ্নের জন্য পোস্ট করা জবাবগুলির ভিত্তিতে, ডিফল্ট নির্মাণকারীর জন্য পরিস্থিতি একই রকম মনে হয়। ডিস্ট্রাক্টরদের জন্য " =default" এবং " {}" এর মধ্যে অর্থের প্রায় কোনও পার্থক্য নেই, ডিফল্ট কনস্ট্রাক্টরগুলির জন্য এই বিকল্পগুলির মধ্যে প্রায় একইভাবে অর্থের কোনও পার্থক্য নেই? এটি হ'ল আমি ধরে নিচ্ছি যে আমি একটি প্রকার তৈরি করতে চাই যেখানে সেই ধরণের অবজেক্টগুলি উভয়ই তৈরি এবং ধ্বংস হবে, আমি কেন বলতে চাই
Widget() = default;
পরিবর্তে
Widget() {}
?
এই প্রশ্নের মূল পোস্টিং কিছু এসও বিধি লঙ্ঘন করার পরে যদি এই প্রশ্নটি প্রসারিত করে তবে আমি ক্ষমা চাই। ডিফল্ট নির্মাতাদের জন্য প্রায় অভিন্ন প্রশ্ন পোস্ট করা আমাকে কম পছন্দসই বিকল্প হিসাবে আঘাত করেছে।
std::has_trivial_destructor<Widget>::valueহয় trueপ্রথম, কিন্তু falseসেকেন্ডের জন্য। এর কী কী প্রভাব পড়ছে তা আমিও জানি না। :)
= defaultএটি আরও স্পষ্টত ইমো এবং এটি নির্মাণকারীর সাথে সহায়তার সাথে সামঞ্জস্যপূর্ণ।