あなたのクラスにポインタがある場合は、おそらく何か間違っています。
それとして再書き込みする方がよいでしょう:
class GPSPoint
{
private:
double lat;
double lon;
double h;
std::string label;
public:
GPSPoint (GPSPoint const& copy)
: lat(copy.lat)
, lon(copy.lon)
, h(copy.h)
, label(copy.label)
{}
// You should also have an assignment operator
GPSPoint& operator=(GPSPoint copy) // Use Copy/Swap idum.
{ // Pass by value to get implicit copy
this->swap(copy); // Now swap
return *this;
}
void swap(GPSPoint& copy) throw()
{
std::swap(lat, copy.lat);
std::swap(lon, copy.lon);
std::swap(h, copy.h);
std::swap(label,copy.label);
}
};
は、今ではずっと簡単になります。
でもねえ、私たちは、コンパイラが生成コピーコンストラクタがあります忘れてしまった:
をだから今、あまりにも簡単になります。
完了
class GPSPoint
{
private:
double lat;
double lon;
double h;
std::string label;
};
を。よりシンプルな方が良いでしょう。
ポインタを絶対に保持する必要がある場合(ポインタが最適化されていないと思われるため)、ポインタを学習する必要がある場合(ポインターを使用する必要がありますが、使用しない場合は学習する必要があります)
class GPSPoint
{
private:
double lat;
double lon;
double h;
char* label;
public:
// Don't forget the constructor and destructor should initialize label
// Note the below code assumes that label is never NULL and always is a
// C-string that is NULL terminated (but that each copy creates
// and maintains its own version)
GPSPoint (GPSPoint const& copy)
: lat(copy.lat)
, lon(copy.lon)
, h(copy.h)
, label(new char[strlen(copy.label)+1])
{
std::copy(copy.label, copy.label + strlen(label) + 1, label);
}
// You should also have an assignment operator
GPSPoint& operator=(GPSPoint copy) // Use Copy/Swap idum.
{ // Pass by value to get implicit copy
this->swap(copy); // Now swap
return *this;
}
void swap(GPSPoint& copy) throw()
{
std::swap(lat, copy.lat);
std::swap(lon, copy.lon);
std::swap(h, copy.h);
std::swap(label,copy.label);
}
};
それはコンストラクタ – a1ex07
は:: '' label'ためSTRING'をSTDを使用するか、あなたには、いくつかの愚かな理由でそれを禁止されている場合は、独自の文字列クラスと使用を書くコピーし、 '演算子='のようにではないに見えますそれ;言い訳しない。 – GManNickG