ページ

2014年4月27日日曜日

そーなのかー

ちびたみどっとねっと・わーくす の東方project 創作Flash 「そーなのか♪」
これの音源が公開されているわけですが、それを見てふと思いました。
「好き勝手にソロ演奏できるソフトが作れるかもしれない」
 ActiveBasicでぽちぽちと作ってみました。

このソフトの説明としては「適当に演奏して遊べる音のおもちゃ」でしょうか。
詳しくは、ホームページのほうに書いてあります。

説明とダウンロードのページ:

2014年4月5日土曜日

ActiveBasic to C++: メモリ管理

ActiveBasic でも C++ でも(というかもちろん)ヒープ領域のメモリを扱って動的に変数を確保することができます。

今回は要素を2つもつLong型(C++ではint型)の配列を動的に確保して 10 + 20 の計算をします。
ActiveBasic:
#console
Dim p As *Long
p = calloc( SizeOf( Long ) * 2 )
p[0] = 10
p[1] = 20
print p[0] + p[1]
free( p )
End

C++:
#include <iostream>

int* p;

int main(){
 p = new int[2];
 p[0] = 10;
 p[1] = 20 ;
 std::cout << p[0] + p[1] << std::endl;
 delete[] p;
 return 0;
}

実は C++ でも calloc() は使えますが普通使わないそうです。( C++ の各種講座参照 )
そういえば ActiveBasic でも new 演算子がありましたが、あれはクラス専用です。
でも C++ では new で int 型を確保できました。これはなぜかというと、 C++ では基本型(intとか) もクラスのようなオブジェクトとしてて定義されているからなんです。だからこんなこともできます。

#include <iostream>
int* p;
int main(){
 p = new int( 10 + 20 );
 std::cout << p << std::endl;
 delete p;
 return 0;
}

これは int のコンストラクタに 10 + 20 の結果を初期化で代入するように指示したもので、ちゃんと 30 と表示されます。
ここの delete には [] がありませんが、これは配列を確保した時につけるものです。逆に配列を確保したときに [] を忘れると配列を開放できずシステムが不安定になりますのでご注意。

今日はここまで。