2010/07/01

QT4でのconnect()メモリリーク

QT Creator 2.0がリリースされたのでUbuntu 10.04にQT SDK 2010/04を入れてみました。

いろいろ試してみましたが、ロケールファイルはあるのに日本語化されない問題があったり、QT SDK 2010/02で作成したUIの変更が反映されなかったり、微妙な感じだったので、ひとまずQT SDK 2010/02を使っています。

qmakeを毎回PATHに配置するのが面倒なので…

QT Creatorはqmakeコマンドをパスから探すようになっているので、オプションから変更はできますが、起動用のスクリプトを使うようにしました。

/opt/qtsdk-2010.02/bin/qtcreator.sh

#!/bin/bash
### QTCreator Startup Shell
### @author: Yasuhiro ABE <yasu@yasundial.org>
### @note: Please place this script at the qtcreator directory.

BASEDIR=$(dirname $0)

PATH=$BASEDIR:$BASEDIR/../qt/bin:$PATH
export PATH

umask 022

exec ${BASEDIR}/qtcreator

connect関数のメモリリーク?

QTでは基本的にコンテナになるクラスがオブジェクトを置き換えたりする際に、deleteを呼んでくれるのでメモリリークが起きにくい構造になっています。

QTimerを使うところでサンプルをそのままループに入れて気がついたのですが、connect()を繰り返し呼んでいくと、簡単にメモリを使いきってくれます。

本来不要な処理をしているので、問題ないのですが、connect()を動的に呼び出すような作りは気をつける必要がありそうです。

サンプルにあるようにコンストラクタで必要なオブジェクトの生成とconnect()処理が完了するような作りにするべきなんでしょうね。

0 件のコメント: