0

いくつかのchar*メンバーがいる非常に単純なクラスがあります。それらの値を設定する最良の方法はstrcatですか?

class CImage {
public:
    CImage() {};

    char* Name;
};

void AddImage(const char* Name)
{
    CImage* img = new CImage();

    strcpy(img->Name, Name); // Is this correct or the best way?
}
4

2 に答える 2

11

char *を削除して使用することを強くお勧めしますstd::string

メンバーとして、ポインタへのメモリの割り当て(コンストラクタ)とメモリの割り当て解除(デストラクタchar *)についてわざわざする必要があります。また、例外にアクセスするたびに、例外を管理し、基になるデータを手動で管理する必要があります。 また、クラスの3つのルールに従うようにする必要があります。

要するに、足(または頭)を簡単に撃つことができる場所が多すぎるので、最も安全で最善の方法は、std::stringメンバーとして使用し、すべてのトラブルを回避することです。

于 2012-06-15T07:52:45.157 に答える
4

最初に、このような文字列を格納するのに十分なメモリを動的に割り当てる必要があります

img->Name = new char[strlen(Name) + 1];
strcpy(img->Name, Name);

その場合は、次を使用してメモリの割り当てを解除する必要がありますdelete[]

また、コンストラクターで文字列とその初期化をカプセル化することを検討する必要があります。

ただし、文字列を格納するための最良の方法はstd::string

于 2012-06-15T07:53:23.260 に答える