クラスの中で用意した文字列領域のクラス内での使用 – プログラミング – Home

クラスの中で用意した文字列領域のクラス...
 
通知
すべてクリア

[解決済] クラスの中で用意した文字列領域のクラス内での使用


8ビット
 8ビット
(@8ビット)
ゲスト
結合: 22年前
投稿: 12
Topic starter  

はじめまして。
このたび仕事でとあるオンラインシステムのデータベースを、
夜中にバッチ更新するプログラムをVC6.0SP5で作成しました。
このプログラムはWIN2000上で動かすwin32concoleアプリケーションで、
main()の中で実際の処理を行うクラスオブジェクトを作成して処理を行います。
こんな感じです。
int main(){
doClass obj;
obj.Execute();
return 0;
}
Execute()以下で、SQLを文字列として作成してクラスの中で発行していくのですが、
sprintfでSQLを組み立てる際に必要な文字列領域をクラスの中で次のように取って
使いまわししています。
class doClass{
private char m_sqlbuf[2048];
...
SQL文字列が2048のサイズを超えることはないので、このようにしたのですが、
(必要になったときに必要なだけヒープに領域をとる方法は、テスト期間が限られて
いて、失敗した場合をチェックしきれないと思ったので)
ここで、ちょっと教えていただきたいのですが、こういうやり方は危険でしょうか?
もしくは普通はしない、などありましたら今後のためにも教えていただきたいのです
が。 ちなみにですが、このdoClassは常にというかひとつしか生成されません。
長文失礼いたしました。それと分かりにくいタイトルもお許し下さい。


引用未解決
トピックタグ
魅惑
 魅惑
(@魅惑)
ゲスト
結合: 22年前
投稿: 2
 

>doClassは常にというかひとつしか生成されません。
この条件なら問題ないと思います。
あくまで条件を厳守するなら。


返信引用
る
 る
(@る)
ゲスト
結合: 22年前
投稿: 5
 

文字列ならstd::stringの方がよくない


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

>doClassは常にというかひとつしか生成されません。

非staticメンバなので、インスタンスがいくつ出来るかは関係ありません。

問題が起こるとすれば、
・同一のインスタンスに対して複数スレッドから同時にメンバ関数を呼び出す
・あるm_sqlbufを使うメンバ関数内から、別のm_sqlbufを使うメンバ関数を呼び出し、
呼び出し側はm_sqlbufの中身が変わっていると思わずアクセスしてしまう
といった場合でしょうか。

ローカル変数で良いのでは?


返信引用
8ビット
 8ビット
(@8ビット)
ゲスト
結合: 22年前
投稿: 12
Topic starter  

回答をくださったみなさんありがとうございます。
とくに問題がなさそうなので安心しました。

>文字列ならstd::stringの方がよくない
sprintf(m_sqlbuf, SELECT * FROM %s, TABLE01);
のように使用しています。std::stringでこのような書式指定のやり方が
わからなかったもので。^^;


返信引用
る
 る
(@る)
ゲスト
結合: 22年前
投稿: 5
 

参考までにこんなのがあります。
#include <iostream> //cout
#include <sstream> //ostringstream
#include <iomanip> //setw,setfill
int main()
{
using namespace std;
for(int i=0; i<10; ++i){
ostringstream ost;
ost<<test<<setw(2)<<setfill('0')<<i<<.txt;
cout<<
ost.str() //stringを返す
<<endl;
}
return 0;
}


返信引用
魅惑
 魅惑
(@魅惑)
ゲスト
結合: 22年前
投稿: 2
 

>非staticメンバなので、インスタンスがいくつ出来るかは関係ありません。
関係なくはないでしょう。
先を見てない素人発言です。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

>関係なくはないでしょう。

なぜ? スタック領域の大きさとか?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 関係なくはないでしょう。

具体的にはどのような危険性があるのでしょうか?

インスタンスをたくさん作ると
実際には使っていないのに多数の配列メモリが
占有されたままになってしまうというような事ですか?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました