overthestardust 2013-02-20 10:54:54

[C++] 余命マイナス このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

一時オブジェクトの寿命がー 未定義の動作コワイヨ。 他にもいろいろ突っ込みどころが… こんなコードが世の中に出回っているのです…

struct Foo {
  // コンストラクタとか
  // メンバ変数とか
};

void Hoge( Foo* foos[], int n )
{
  // 読み取って何かする
  // 書き込みはしない
}

int main(int argc, char* argv[])
{
  Foo* foos[] = { &Foo( /*何か*/ ), &Foo( /*初期値*/ ) };
  Hoge( foos, 2 );
  return 0;
}

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(2)

#1 m_akihiro 2012-09-24 06:50:58  

Hogeの引数をconst std::vector<Foo>&のみでいいんじゃないかな?

std::vector<Foo> foos = {Foo(...), Foo(...)};とかinitializer_listなのでC++11必須ですが

#2 donadonasan 2018-04-30 22:42:59  

何らかの理由でポインタの配列を作りたいなら、この初期化はだめだよねえ。スコープの関係で、オブジェクト作るそばから破棄されうる(よね?)

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[その他] HOW TO ABC..

このエントリーをはてなブックマークに追加

実際にあった某システムの超重要なマスター...

create table item_master (
 A varchar(2...

鑑賞する »

[C] 何がしたかったのか

このエントリーをはてなブックマークに追加

10年位前、炎上しているプロジェクトの支...

void funcX() {
    int a;
    a = func...

鑑賞する »

[C++] お前は何も分かっちゃいない

このエントリーをはてなブックマークに追加

誰が std 名前空間内に好き放題書いて...

//「using namespace std」は厳禁なので!!
namespa...

鑑賞する »