トップページ⇒tech
982コメント315KB

C++相談室 part15

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
怪しい仕様は細々ありますが大丈夫です!
elegantなソースを目指してね。 関連URL>>2-10

v(^・^)v
0153デフォルトの名無しさんNGNG
>>152
そうだよ、作れよ、そのぐらい。
0154デフォルトの名無しさんNGNG
「かもしれない」はムダの元。
0155デフォルトの名無しさんNGNG
>>152
逆切れは勘弁してくれ。
MFC使ってアプリ組むならっつーからCString使えっつってるだけじゃんよ。
そのライブラリが一番近い環境に合わせればいいじゃん。
画像を読み込む時にWin32APIを使うならLPCTSTRを使えば良いし、
CBitmapを使うんならCStringを使えば良いし、
STLを使うんならstd::stringを使えば良いし、
全部自前でやるんならchar const*を使えば良いだけの話だろ。
0156デフォルトの名無しさんNGNG
>>149
> そんな事言ったってなるべく標準のものが使いたいじゃないですか気分的に。
そもそも MFC 使ってる時点で「標準」に拘る意味はない。本気でマルチプラットホーム
対応にするなら Mozilla のように MFC 捨て捨てで、もっと下のレイヤーから作り込ま
ないと。
0157デフォルトの名無しさんNGNG
>>156
下の階層から作ると依存性が高くなると思うが。
0158デフォルトの名無しさんNGNG
>>153
それは一番よくないと思います!STLの本の冒頭に「貴方は既に他人が作ったコードを自分で作り直して云々、車輪の再発明云々」
ってかいてありましたよ

>>154
イヤッハハ、まあそうおっしゃらずに・・・
でも画像読み込み関数なんて絶対MFCと分離したいと思いませんか

>>155
>MFC使ってアプリ組むならっつーからCString使えっつってるだけじゃんよ。
たしかにそんな気もします。MFC使ってるんだからMFCの流儀にあわせてコーディングする。
これはコレで正しいと思います。MFCがCString用意してるのに無理してstd::stringを
使うというのもヘンかもしれないですね

>>156
それはどうなんでしょうか。。。確かに幸せな世界が来るかも知れません。。
でも凄いマイワールド展開しまくりな上に、凄い手間がかかりそうです。そこまではできないので、
出来る範囲で汎用的なコードを書きたいのです
0159デフォルトの名無しさんNGNG
158は低脳を装った煽りか。
0160デフォルトの名無しさんNGNG
漏れは、LPCTSTRを見ると、ユニコードでなんか絶対ビルドしないと分かってるのに、
char *を渡すのを躊躇ってしまう。同様にしてstd::stringも。
で結局、TCHARかCString・・・
0161デフォルトの名無しさんNGNG
>>160
#ifdef _UNICODE で std::string, std::wstring 切り替えれば? 俺は WTL::CString
使うけど。
0162デフォルトの名無しさんNGNG
俺はマルチバイトの処理が面倒なので内部はみんなstd::wstringだ、
そしてVC++付属のSTLのバグに悩まされたり、STLPortのコンパイルオプションの違いに翻弄されたりするんだ。
それでも何も考えずに++itrで次の文字に移れるのはめちゃくちゃ幸せだ・・・
0163デフォルトの名無しさんNGNG
class CFileData{
public:
 CFileData(char *filePath);
 virtual ~CFileData();

protected:
 BYTE *m_pBuff;
  :
  :

こういうクラスを作っています。コンストラクタでデータファイルを開き、
m_pBuffに格納する仕組みです。
そこで質問なのですが、コンストラクタでデータの読み込みに失敗した場合、
失敗したかどうかはどうやって判定すればいいのでしょうか?
後で、bool IsSuccess()みたいな関数を呼んでやら無いといけないでしょうか?
それとも、コンストラクタでデータを読むという仕様自体が間違っているでしょうか?
アドバイスください。
0164デフォルトの名無しさんNGNG
>俺はマルチバイトの処理が面倒なので内部はみんなstd::wstringだ、
お前は贅沢だ、贅沢は許さん
0165デフォルトの名無しさんNGNG
>>163
例外を飛ばしたり operator bool を定義する
0166デフォルトの名無しさんNGNG
>>163
素直に

class CFileData{
public:
 CFileData();
 virtual ~CFileData();
 bool Read(char *filePath);

とでもしておけば?
0167163NGNG
>>165
>>166
わかりますた。
0168デフォルトの名無しさんNGNG
C++でCSV形式のファイル読み込むのに
なにかスマートでいい方法ないですかね

stringにいれてsubstr()でとっていくとか
istreamのget()かgetline()でdelimiterを’,’にして
よんでいくとか方法はいろいろあるんですけど
なかなかうまい方法みつからなくて
0169デフォルトの名無しさんNGNG
Windowsに設定されている、DNSサーバアドレスを取得するにはどうすればよいのでしょうか?
やはりWinsockを使用するのでしょうか?
0170デフォルトの名無しさんNGNG
>>169
Windows 系のスレに逝って。
0171169NGNG
>>170
逝ってきます・・・。
0172デフォルトの名無しさんNGNG
namespace X
{ enum { E = 1 }; }
struct X
{ enum { E = 2 }; };

int f(){ return X::E; }

「あいまいです」とか言われそうなもんなんですが、
エラーも警告もなんにもでないんです。
同じ名前の名前空間とクラスが :: で指定されたとき、
どのように振舞うような仕様なのでしょうか?

ちなみに、gcc3.2 では、 f()==2 になります。
0173デフォルトの名無しさんNGNG
>>172
BCC 5.5.1 では
エラー E2238 TestCon.cpp 6: 'X' の宣言が複数見つかった
0174172NGNG
>>173
ありがとうございます。
MSVCでも試してみたら、エラーになりました。
gccがバグってんのかな?
0175デフォルトの名無しさんNGNG
C だと struct って独自の名前空間を持ってたけど、C++ だとどうなんだろ。
キーワード struct が省略可能ってことは、やっぱり普通のグローバルになる
のかな。
だとすれば gcc は間違ってると思うけど・・・規格博士降臨キボンヌ。
0176デフォルトの名無しさんNGNG
3.3 -4
a namespace name or a class template name must be unique int its declarative region.

3.3.7
A class name or enumeration name can be hidden by the name of an object, function, or enumerator declared in the scape.

7.3.2 -4
A namespace-name 〜 not 〜 same declaretive region.

つまり、クラス名と列挙名はオブジェクトや関数に隠されるけど、ネームスペース名と
テンプレートクラス名は、宣言空間でユニークじゃなくちゃいけないってか。
gccの負け?
0177176NGNG
じゃあ、こんなことも可能なのか・・・
class A{}A,B; //OK.
class C{};
C C; //OK.
C D; //Error.
0178デフォルトの名無しさん NGNG
newで確保した領域は
mainが終了すると勝手に解放されますか?
0179デフォルトの名無しさんNGNG
>>178
勝手には解放されません。deleteすれ。
new[]で確保したものはdelete[]で。
それがいやなら、スマートポインタでも使ってくれ。
0180デフォルトの名無しさんNGNG
環境依存の話はよそでやって
0181デフォルトの名無しさんNGNG
>>178
まともなOSだったら解放される。しかし、delete しないということは
デストラクタも呼ばないわけ? それだとまずいことが多々おきそう。

>>180
これくらいなら環境依存というほどでもないっしょ。
0182デフォルトの名無しさんNGNG
mainが終わって、グローバルに置いたオブジェクトのデストラクタが
呼ばれた後は、何が起こるか未定義だな。
0183デフォルトの名無しさんNGNG
本当にしょうも無い質問でごめん。
C++でJavaみたいにWebアプリケーションの開発って出来ます?
仮にできるとしたら、Javaに勝っていますか?

本当にどうしようもない質問でごめん。。。
0184デフォルトの名無しさんNGNG
>>183
しょうもないので却下。
0185デフォルトの名無しさんNGNG
>>183
「Javaみたいに」とはどんな特徴のことだ?
C++でできるか否かはそれに因る
0186デフォルトの名無しさんNGNG
>>183
CGIをWebアプリと呼べるのならできる。
もしくは、JavaをC++で作ってやるとか
JavaのコードをC++で生成するとか(以下略)。

>勝っていますか?
しょうもないので却下。
0187デフォルトの名無しさんNGNG
>>168
ttp://www.s34.co.jp/cpptechdoc/article/xml/csv2xml/index.html
0188デフォルトの名無しさんNGNG
ファイル間の依存関係を軽減するために
class CData;

class CDocument {
 CData *m_data;
・・・
こういう風にしてCDocumentのコンストラクタでm_data = new CData;やってます。
でもこれだとdelete忘れたり色々鬱陶しいので、できることなら
#include "CData.h"

class CDocument {
 CData m_data;
・・・

こんな風にしたいと思っています。何かいい手はないでしょうか。
0189デフォルトの名無しさんNGNG
>>188
そんなあなたにauto_ptr
0190デフォルトの名無しさんNGNG
>>189
ポインタになってるのがそもそも嫌なんです。deleteできちゃうっていう状況が嫌です。
でも依存関係は減らしたいのです。
例えば標準のstringが気に入らなくて、自分で作ったCMyStringがあるとします。
もうこれはアプリの中にあっちこっちで使われてる上に、今後UNICODEをエンコードしたり、
色々な機能を追加させる予定だとします。
こういう場合どうしたらいいですか。
0191デフォルトの名無しさんNGNG
>>190
そんなあなたにconst auto_ptr
0192デフォルトの名無しさんNGNG
string如きにコンストラクタでいちいちnewしたりするのもめんどくさいです
0193デフォルトの名無しさんNGNG
>>190
なにを聞きたいかがまったく分からん。

CMyString(char *str) {
this->str = charToUnicode(str);
}
って書いてchar型で渡されたらUnicodeに変換して、内部でUnicodeで管理すればいーじゃん。
外部からはどっちで渡されてもOKにしといて。
0194デフォルトの名無しさんNGNG
つーか、自分でfacet作るなりどっかから持ってくるなりすれば標準ライブラリ使って
Charsetの変換とかもできるようになってるんだけどな、C++は。
0195デフォルトの名無しさんNGNG
>>193
>>194
stringは例え話です
僕が質問したいのは>>188の依存関係の問題です
0196デフォルトの名無しさんNGNG
>>195
>>189 >>191
boost::scoped_ptr でも良いぞ。
0197デフォルトの名無しさんNGNG
依存関係を減らすのにpImplイディオムが有名だ、
しかしコンストラクタでnewしたくないめんどくさがり屋にはお勧めできない。

さらに依存関係をほとんど無くすのにJavaが有名だ、
しかしこちらは全てのオブジェクトをnewする必要があるのでますますお勧めできない。

依存関係とめんどくささはトレードオフの関係にあるようだ。
0198デフォルトの名無しさんNGNG
>>196
ていうか、そういうのって一般的なんですか。あんまりそういうのやってるって聞いたこと無いんですが。
メンバのオブジェクトというオブジェクトを全部scoped_ptrとかで持ったりしたら、
人に見せたときに「うわーなんだこのプログラム!バカがいるYO!」とか言われないですか。
0199デフォルトの名無しさんNGNG
>>197
>依存関係を減らすのにpImplイディオムが有名だ、
それは名前から察するにEffective-C++でも紹介されていた、実装クラスとインターフェースクラスを
分離するっていうテクですか。
>しかしコンストラクタでnewしたくないめんどくさがり屋にはお勧めできない。
それもそうですけど、これでもインターフェースクラスに変更があったら再コンパイルですよね。。。
それならauto_ptr使うほうがまだ良い気がします。ファイルの増殖を防げますし。
>さらに依存関係をほとんど無くすのにJavaが有名だ、
ああ、なんかありますよね、、、ゲーム作りたいのでJAVAだと速度が心配です。
>依存関係とめんどくささはトレードオフの関係にあるようだ。
了解しますた。
0200デフォルトの名無しさんNGNG
>>198
scoped_ptrのソースを持ってきて、そのコンストラクタを書き換えて自動的にnewするようにすれば君のやりたい事が実現できる。
毎回newを書かなくても、その独自のscoped_ptrを使えば自動的にインスタンスが作られる。
それを馬鹿だと言うやつには経緯を説明して、それでも理解できなければそいつがバカだと笑ってやるがいいよ。
0201デフォルトの名無しさんNGNG
>>198
ふつーはメンバのオブジェクトを個々に scoped_ptr で持たずに pimpl イディオム
使うけどな。Effective C++ じゃなくて Exceptional C++ ね。

> それもそうですけど、これでもインターフェースクラスに変更があったら再コンパイルですよね。。。
それは仕方ない。

ただ、影響を最小限に留める方法としては、

1. 純粋仮想関数だけからなるインターフェースクラスを分離
2. 実装側は、そのインターフェースを継承して vtbl を埋める
3. クライアントはインターフェースだけを見る

って手がある。

インターフェースを拡張する場合、既存のインターフェースには手を加えず、別のイン
ターフェースを定義して、それを実装側に継承させる。(インターフェースの多重継承
というヤツやね。COM でも良く使われてる)
0202デフォルトの名無しさんNGNG
>>200
うわっ、本当だ、画期的だ。それってスゴくないですか!!??
心配なんですが、scoped_ptrみたいなクラスのテンプレート引き数って、includeしてないやつでもOKですよね!?
うーむ。これは新しい。。。演算子オーバーロードしてポインタに見えなくするとか、色々出来そうですね
0203デフォルトの名無しさんNGNG
>>201
>インターフェースを拡張する場合、既存のインターフェースには手を加えず、別のイン
>ターフェースを定義して、それを実装側に継承させる。
ははぁ、、、なるほど、、、色んなワザがあるんですねえ。こんな感じでいいんですか。

class CImpClass : public CInterfaceVer1, public CInterfaceVer2 ...
{
};

うーむ
0204デフォルトの名無しさんNGNG
>>200
やってみましたけど、テンプレートクラスの中で目当てのオブジェクトをnewできないじゃないですか!
作りたいクラスの名前しか分からないからnew出来ない、そりゃそうか、、、
0205デフォルトの名無しさんNGNG
>>204
template< typename T > class ptr_container
{
public:
 ptr_container(void) : m_ptr( new T() ){}
 ~ptr_container(void){ delete m_ptr; }

private:
 T* m_ptr;
};

ってできないっけ?
0206デフォルトの名無しさんNGNG
>>205
こういうのは無理みたいです
#include "ptr_container.h"
class CData;

class CDocument {
ptr_container<CData> m_data;
};
コンパイルエラーになります。CData.hをインクルードしたらいけますけど、
それだと最初の目的が達成できないです。
0207デフォルトの名無しさんNGNG
>>206
俺はできたよ。
普通にポインタ使うときと同じように、しかし初期化する必要なく。

CDocumentの実装ファイルには当然CData.hをインクルードするよ。
0208デフォルトの名無しさんNGNG
>>205
無理。new する時点で、そのクラスの定義が見えないと NG なんで。

別のクラスにインスタンス構築を押しつけるって手はある。

template <calss T, class TFactory>
class ptr_container
{
public:
  ptr_container() : m_ptr(TFactory::Create());
  ~ptr_container() : { delete m_ptr; }
private:
  T* m_ptr;
};

struct FooFactory
{
  static Foo* Create();
};
0209デフォルトの名無しさんNGNG
>>207
> CDocumentの実装ファイルには当然CData.hをインクルードするよ。
……スレの流れを読め。
0210デフォルトの名無しさんNGNG
>>209
俺はスレの流れを正しく把握してるって
188を読むからに206はCDocumentの実装ファイルにCData.hをインクルードする事はかまわないと言っている。
0211デフォルトの名無しさんNGNG
予期しない 'class' 'one_image' です。
と書かれて一つのメンバ変数が指されるんですけど
どういうこと?
0212デフォルトの名無しさんNGNG
>>210
スマン
0213デフォルトの名無しさんNGNG
>>207
ごめんなさい、いけました。includeする順番間違ってました。
これマジ凄いですよ、みんな使いましょうよ。
今時これくらいならオーバヘッドだってあんまり気にならないでしょう。

ところでちょっと謎な現象なんですが、
CDocument.cppの中でCData.hを正しい順番でインクルードしないとエラーになるというのは分かります。
で、ためしにCHoge.cppってのを作って、その中ならCDocument.h単体でインクルードしてもエラーにならないのは
どういう事なんでしょうか。なんか勘違いしてますか僕

>>210
はい、CDocument.cppの中でCData.hをインクルードするのはOKです。
でないとCDataを触れないですからね。
0214あNGNG
いままでJAVAの勉強していてc++は文法理解した程度です。
c++でXMLを扱おうとしてxerces-cを使っているのですが、
サンプルをコンパイル時に

fatal error C1083: インクルード ファイルがオープンできません。'xercesc/util/PlatformUtils.hpp': No such file or directory

とエラーが発生しました。
設定的な問題だと思うのですがどう対処すればいいのでしょうか?
0215213NGNG
みなさんありがとうございました、色々やってみましたがいけそうです。
え〜と混乱してしまいましたけど、
CDocument.cppでCDocument.hをインクルードする時にCData.hもインクルードする必要があるのは、
CDocument.cpp内にCDocumentのコンストラクタの実装があるから。
CHoge.cppでCDocument.hを単体でインクルードしても、CDataを触ったりしない限りCData.hをインクルードしなくてもコンパイルとおる。
という理解で良いでしょうか。
ていうかこれって凄いアイディアじゃないですか。STLに入れて貰えそうじゃないですか
0216デフォルトの名無しさんNGNG
>>215
おけ。
でもデフォルトコンストラクタが無いと動かないので208のように使うのが一般的かと。
しかしコンストラクタを省略するのはものぐさなのでC++向きじゃない気も。
LokiのSmartPtrにはそういうポリシーを受け入れる用意があるけど、各自勝手に実装しろってスタンスだし。
0217デフォルトの名無しさんNGNG
フーン、いいね、これ。デフォルトコンストラクタが無いとダメっていう制限あるけど、後でInit()呼んでやったら良い訳だし。
ptr_containerが「.」をm_ptr->に、「&」をm_ptrに置き換えてくれたりしたら最高なんだけど、そういうのは無理なのかね。
0218デフォルトの名無しさんNGNG
C++ の仕様上 operator. はオーバーロードできません。
0219172NGNG
>172-177
gcc がバグってるということで。

http://gcc.gnu.org/cgi-bin/gnatsweb.pl
view #6734
0220デフォルトの名無しさんNGNG
'two_image::two_image' : オーバーロードされたメンバ関数が
'<Unknown>' にありません。
とかいうエラーメッセージが出るのですけど、
どういうことなんでしょう?
0221デフォルトの名無しさんNGNG
【ネットボランティア】余ったCPUを・・・
 cell computingとは、ブロードバンドに接続された家庭内
や企業内のPCの余剰CPUパワーを統合し、
仮想的なスーパーコンピュータとしての利用を実現する
技術を用いたSI、ネットワークサービスです。
 バイオ、物理計算、設計、金融工学、CGレンダリング
などの分野のお客様へ、安価に仮想スーパー
コンピュータパワーを提供することを目的としております。
 なお、将来的には収益にあわせてCPUパワーを提供し
てくださる参加者へポイントシステムやデジタルコンテンツ
による利益還元を考えております。
http://www2.cellcomputing.jp/

2ちゃんねるのチームあります。【挑戦しる】
http://members.cellcomputing.jp/services/teams/team.htm?id=ABBE425B-CE11-4DA4-8591-C68DF67DA41A
0222デフォルトの名無しさんNGNG
> デフォルトコンストラクタが無いと動かない
scoped_ptr 的に使うならptr_container自体に関するコンストラクタとかは
全部不要だろうから、

template< typename T > class ptr_container
{
public:
ptr_container() : m_ptr( new T() ){}
template<typename T1>
ptr_container(const T1& t1) : m_ptr( new T(t1) ){}
template<typename T1, typename T2>
ptr_container(const T1& t1, const T2& t2) : m_ptr( new T(t1,t2) ){}
template<typename T1, typename T2, typename T3>
ptr_container(const T1& t1, const T2& t2, const T3& t3) : m_ptr( new T(t1,t2,t3) ){}
...

と10個くらい並べとくとかいう手がある。constじゃない参照をとる
コンストラクタに対応しようとするといささか美しくない方法が必要だが。
0223デフォルトの名無しさんNGNG
派生先クラスのメンバ変数に派生元のクラスのオブジェクトを含むときは
継承しないただのコンポジションと違うところありますか?
派生クラスのメンバオブジェクトのコンストラクタの仕方とか。


0224デフォルトの名無しさんNGNG
>>223
よく状況がわからんからコードで示せ
0225233NGNG
>>234
class class0{
public:
int val0;
}
// class0のコンストラクタ
class0::class0(int x){
val0 = x;
}

class class1:public class0{
// メンバオブジェクト
public:
class0 obj0_0,obj0_1;
int val1;
f1();
}
としたときclass1のコンストラクタは
class1::class1(int x1, int x0_0, int x0_1)
:obj0_0(x0_0), obj0_1(x_1){
val1 = x1;
}
とう具合で良いでしょうか?







0226デフォルトの名無しさんNGNG
>>222
へえー。それでもコンパイル通るんだね。
>コンストラクタに対応しようとするといささか美しくない方法が必要だが。
ドーやんの、オスィエテよ!

このやり方ってオーバーヘッドが若干ある&初期化が独特って事以外デメリット無いよね?
0227デフォルトの名無しさん NGNG
継承クラスのメンバ関数定義と継承元のクラスのメンバ関数の定義を別の
ファイルにするときのリンクの仕方は何か特別のことする必要あるでしょうか?
0228227NGNG
継承先クラスの関数で継承元の関数を使っていて、
たぶんそのリンクができてないからエラーが出てるのだと思いますが、
どうすれば良いでしょう?
0229デフォルトの名無しさんNGNG
>>225
class1のコンストラクタで、継承元のclass0の初期化子が呼ばれてないから
それだとエラーになるんちゃうか。
0230デフォルトの名無しさんNGNG
VB厨なのだが、、、業務ではC++は使ったことが無い。
しかし趣味でC++を勉強していて、とりあえず
「新C++言語入門<ビギナー編>林晴比古 著」
の内容は一通り理解しているつもり。

こんな俺は、C++を使ってのソフトウェア開発で通用しますか?
0231デフォルトの名無しさんNGNG
通用しません。アセンブラをやってからまた来てください。
0232デフォルトの名無しさんNGNG
初心者の中の初心者が読むその本に、業界の中で何の価値があるのだろう。
せめて、ビギナー編じゃないほうの、上下巻のほうを読んだと言おうや。
0233230NGNG
ということは、会社で暇を見つけてはその本で勉強していた俺は
陰で馬鹿にされている可能性が非常に高いとも言えますね。。。
0234デフォルトの名無しさんNGNG
>>233
そこからステップアップしてくつもりなら何も問題ないのでは。
0235デフォルトの名無しさんNGNG
>>230
C++Primer読んでたけどこれなかなかよかったよ。
下らない本を何冊も買うより、これ一冊で
基礎をちゃんとやるのがいいかも。
0236デフォルトの名無しさんNGNG
>>230
とりあえず、晴比古本はやめとけ。
0237デフォルトの名無しさんNGNG
>>235
内容はいいけど、でかすぎて重すぎて読みづらい(涙
0238230NGNG
げ、、、VBもC++もVC++も林さんで揃えてしまった。。。
スレ違いスマソ。
0239次回メルチェは23時NGNG
エッチ

な粗品ファイルをあげるから、おしえてください。
回答と粗品の請求は↓へお願い。
l*ol*im*an*10@ho*tm*ai*l.*c*om

forループで重い処理をしていても、WndProc()が
機能するような方法をおしえてください。

次のソースで描画の処理はできましたが、例えば、
WM_MOVE はできていません。

LRESULT CALLBACK WndProc(の、
 switch (msg) {
  case WM_RBUTTONDOWN:
   func(hWnd);で↓が起動
0240次回メルチェは23時NGNG
void func(HWND hWnd) {
 MSG msg;
 char str[50];

 for (int i = 0; i <= 100; i++) {
  for (int j = 0; j <= 100; j++) {
  wsprintf(str, "%3d,%3d", i, j);
  SetWindowText(hWnd, str);
  while (PeekMessage(&msg, hWnd, WM_MOVE, WM_MOVE, PM_REMOVE)) {
  SendMessage(hWnd, WM_MOVE, msg.wParam, msg.lParam);//ここ失敗
  }

  if (PeekMessage(&msg, hWnd, WM_PAINT, WM_PAINT, PM_REMOVE)) {
  SendMessage(hWnd, WM_PAINT, msg.wParam, msg.lParam);//これ成功
  }
  }
 }
}
0241QNGNG

空のWIN32アプリを作ってダイアログを表示させたは良いんですが
他のDOS(みたいなの)の画面上でチャットするソースとくっ付けたら
ダイアログが表示されなくなりました。ありそうな原因を教えてください。
お願いします
0242デフォルトの名無しさんNGNG
くっつけるなよ(w
0243QNGNG
>>242 そんな・・チャットする方の動作はしてるんですが、
何でダイアログが表示されなくなったのか分からない(泣
ネットも そんな馬鹿なQ&Aないし。。
0244デフォルトの名無しさん NGNG
newで確保した領域はmain関数が終わって
プログラムが終了してもdeleteしないと残っているんでしょうか?
0245デフォルトの名無しさんNGNG
>>244
staticで宣言してたら残る。
自動変数なら消滅。
基本です〜。
0246デフォルトの名無しさんNGNG
>>244
UNIXではプロセスごとに確保したスタック、ヒープは
プロセスが終了した時点ですべて開放されます。
Windowsは知りません。
0247245NGNG
すまん。
mainが終わればstaticでも消滅ですた。。。
0248デフォルトの名無しさんNGNG
大抵の場合領域は開放されるがコンストラクタは呼ばれないので悲惨な事になりかねん。
0249248NGNG
スマン デストラクタ
0250デフォルトの名無しさんNGNG
>>248
デストラクタのこと?
0251デフォルトの名無しさんNGNG
atexit()に念のため登録しておくとかw
0252デフォルトの名無しさんNGNG
>>247
正確には main が終わった後、プログラムの実装終了前、だな。
■ このスレッドは過去ログ倉庫に格納されています