こんにちは(英語は私の母国語ではありませんので、間違えても分かります!ありがとうございます!)C++テンプレートクラス、特定の状況のコピーコンストラクタを宣言する方法は?
私はポインタを含むことができるテンプレートクラスを作成しています。
template <typename T>
class SmartPtr {
private:
T value;
public:
SmartPtr() {};
~SmartPtr() {};
SmartPtr(T* a)
{
this->value = *a;
}
SmartPtr(SmartPtr* a)
{
this->value = a->get_Value();
}
SmartPtr(SmartPtr const* a)
{
this->value = a->get_Value();
}
T get_Value()const{
return this->value;
}
};
これはSmartPtrというテンプレートクラスであり、かつ
class Test
{
public:
Test() { std::cout << "Test::Test()" << std::endl; }
Test(Test const&) { std::cout << "Test::Test(Test const&)" << std::endl; }
~Test() { std::cout << "Test::~Test()" << std::endl; }
Test& operator=(Test const&)
{
std::cout << "Test& Test::operator=(Test const&)" << std::endl;
return *this;
}
void print() const { std::cout << "Test::print() const" << std::endl; }
void print() { std::cout << "Test::print()" << std::endl; }
};
これは私のテストクラスです。
私は私のmain.cppにして
SmartPtr<Test> ptr_t1 = SmartPtr<Test>(new Test);
を宣言し、
コンパイルした後の結果が
Test::Test()
Test::Test()
Test& Test::operator=(Test const&)
Test::~Test()
ですが、私が取得したい結果が
Test::Test()
Test::~Test()
です私は私が書く必要がある特定のテンプレートクラスのコピーコンストラクタがありますか?この状況?
ご理解いただきありがとうございます。
この疑問を参照してください。しかし、もし直接的なものであれば確かではありません:https://stackoverflow.com/questions/926752/why-should-i-prefer-to-use-member-initialization-list – Rakete1111
'this-> value = * a; 'は割り当てです.... – StoryTeller
@StoryTellerコメントありがとうございました。申し訳ありませんが、C++で10日間、知識が不足しています。私は任命をしてはいけないのですか? –