class MyString
{
public:
MyString(int length):_ptr(alloca(length))
{
}
//Copy Constructor, destructor, other member functions.
private:
void* _ptr;
};
int main()
{
MyString str(44);
return 0;
}
main関数の最後で解放されますか、それともコンストラクターが実行された直後に解放されますか?上記のコードが期待どおりに機能する場合は、このような文字列クラスを作成することをお勧めしますか?
アップデート:
主な危険は
- スタックオーバーフロー
- コンストラクターのインライン化
小さいサイズの場合はallocaを使用し、大きいサイズの場合はmalloc / freeを使用することで、StackOverflowを処理できると思います。コンパイラを強制的にインライン化するには、移植性のないコンパイラ固有の方法が必要だと思います。
文字列クラスはあらゆるc++プロジェクトで広く使用されているものなので、私は興味があります。これを正しく行うと、ほとんどの割り当てがスタック内に配置され、そうでない場合はヒープに入るので、パフォーマンスが大幅に向上することを期待しています。これはユーティリティであり、エンドユーザーは内部を認識しません。