3 এর বিধি ( নতুন সি ++ স্ট্যান্ডার্ডে 5 এর বিধি) বলেছেন:
আপনার যদি নিজেকে স্পষ্টরূপে ডেস্ট্রাক্টর, কপি নির্মাণকারী বা অনুলিপি নিয়োগের অপারেটরটি প্রকাশ করতে হয় তবে আপনার সম্ভবত তিনটিই স্পষ্টভাবে ঘোষণা করা দরকার।
তবে, অন্যদিকে, মার্টিনের " ক্লিন কোড " সমস্ত খালি নির্মাণকারী এবং ধ্বংসকারীদের অপসারণের পরামর্শ দেয় (পৃষ্ঠা 293, জি 12: বিশৃঙ্খলা ):
কোন প্রয়োগের সাথে কোনও প্রয়োগ নেই এমন কোনও ডিফল্ট নির্মাতা? এটি যা কাজ করে তা হ'ল অর্থহীন নিদর্শনগুলির সাথে কোডকে বিশৃঙ্খল করা।
তাহলে, এই দুটি বিপরীত মতামত কীভাবে পরিচালনা করবেন? খালি নির্মাণকারী / ধ্বংসকারীদের কি বাস্তবায়িত করা উচিত?
পরবর্তী উদাহরণটি ঠিক আমার অর্থ বোঝায়:
#include <iostream>
#include <memory>
struct A
{
A( const int value ) : v( new int( value ) ) {}
~A(){}
A( const A & other ) : v( new int( *other.v ) ) {}
A& operator=( const A & other )
{
v.reset( new int( *other.v ) );
return *this;
}
std::auto_ptr< int > v;
};
int main()
{
const A a( 55 );
std::cout<< "a value = " << *a.v << std::endl;
A b(a);
std::cout<< "b value = " << *b.v << std::endl;
const A c(11);
std::cout<< "c value = " << *c.v << std::endl;
b = c;
std::cout<< "b new value = " << *b.v << std::endl;
}
জি ++ 4.6.1 ব্যবহার করে জরিমানা সংকলন করুন:
g++ -std=c++0x -Wall -Wextra -pedantic example.cpp
এর জন্য ডেস্ট্রাক্টর struct A
খালি, সত্যই প্রয়োজন নেই। সুতরাং, এটি সেখানে থাকা উচিত, বা এটি অপসারণ করা উচিত?
virtual ~base () = default;
সংকলন করবেন না (একটি ভাল কারণ সহ)
auto_ptr
আপনারও ব্যবহার করা উচিত নয় ।