さまざまなタイプの DataTypes を含むようにカスタム ラッパーを調整しましたが、std::make_pair(customClass,customClass)
クラッシュしたときに gdb を使用してデバッグしましたが、この変数を宣言し、それが作成され、値があるかどうかをテストしたことに加えて、問題は表示されません。私は関数を掘り下げましたが、std::make_pair()
それは std::pair オブジェクトを構築するだけですが、私のクラスは宣言されており、ポインターではありません。問題がわかりません...これがコードです
#include <iostream>
#include <string>
#include <vector>
#include <memory>
class any_type
{
public:
virtual ~any_type() {}
virtual void print() = 0;
};
template <class T>
class concrete_type : public any_type
{
public:
concrete_type(const T& value) : value_(value)
{}
virtual void print()
{
std::cout << value_ << '\n';
}
T & get()
{
return dynamic_cast<concrete_type<T>&>(*this).value_;
}
//recently added
concrete_type(const concrete_type<T>& other) : value_(other.value_)
{}
T value_;
private:
};
class WrapperMultiContainner
{
public:
WrapperMultiContainner():mAnyType(0)
{
mAnyType=new concrete_type<int>(-1);
}
//recently added
WrapperMultiContainner(const WrapperMultiContainner & aCopy)
{
//recently added
mAnyType=new concrete_type<decltype(*(aCopy.mAnyType))>(*(aCopy.mAnyType));
//*mAnyType=aCopy.mAnyType;
}
const WrapperMultiContainner & operator=(const WrapperMultiContainner &)
{ return *this;}
template<typename T>
WrapperMultiContainner(T const & aValue= T()):mAnyType(0)
{
mAnyType=new concrete_type<T>(aValue);
}
~WrapperMultiContainner()
{
delete mAnyType;
}
template<typename T>
T & get()
{
return dynamic_cast<concrete_type<T>&>(*mAnyType).value_;
}
template<typename T>
void get(T & aValue,
int & aErrorCode)
{
try{
aValue=dynamic_cast<concrete_type<T>&>(*mAnyType).value_;
aErrorCode=0;
}
catch(...)
{
aErrorCode=-1;
}
//return dynamic_cast<concrete_type<T>&>(*mAnyType).value_;
}
any_type * getAnyType() const
{
return mAnyType;
}
template<typename T>
void set(T const & aGenericValue = T())
{
if(mAnyType)
{
delete mAnyType;
mAnyType=0;
}
mAnyType=new concrete_type<T>(aGenericValue);
}
private:
any_type * mAnyType;
};
int main()
{
std::cout<<"creando el opciones para el builder de comandos"<<std::endl;
//Creacion de las estructuras que tienen las opciones para la creacion de los comandos
std::string aKeyName("idcompdestiny");
WrapperMultiContainner aKey(aKeyName);
aKey.getAnyType()->print();
WrapperMultiContainner aValue(3000);
aValue.getAnyType()->print();
std::pair<WrapperMultiContainner,WrapperMultiContainner> aPair;
aPair=std::make_pair(aKey,aValue);
return 0;
}
std::make_pair クラッシュを作成する行。ありがとうございます!
PD: コピー コンストラクターを追加しましたが、それでもクラッシュします