[c++] malloc したメモリを初期化する

この記事は、IT エンジニア向けです。

滅多に使わないので忘れるから、個人メモ。

c 言語ではメモリを確保する時に malloc を使う。
c++ では、同様に malloc を使う事も出来るが、普通は new を使う。

malloc はメモリを確保するだけだが、new はメモリ確保の後、確保したメモリの初期化まで行ってくれるからだ。

では問題。
c++ で、あえてメモリ確保に malloc を使用した場合、どうやって初期化すればよいか?

一般的に、メモリ確保処理は負荷が高い。
なので、c や c++ では一度に大量のメモリ確保を行う事がある。
インスタンスを 100 個作成する時、100 回メモリ確保をするより、1 回で100 個分のメモリ確保をした方がパフォーマンス的には良いのだ。

ただし、この時に new を使えない事が多々ある。
new でも複数インスタンスのメモリを一度に確保する事は可能なのだが、この場合コンストラクタに渡す引数がややこしい。
「引数無しのコンストラクタで初期化しておいて、後で各種設定を行う」で済む場合は良いのだが、そうとは限らない。

こんな場合は、初期化を行わない malloc の方が都合が良かったりする。
そうすれば、malloc でメモリ確保だけをしておいて、実際に使う直前にコンストラクタを呼び、初期化すれば良いのだから。

というわけで、malloc で確保したメモリに後からコンストラクタを走らせる方法のメモ。


#include <cstdlib>
#include <iostream>
#include <new>

using namespace std;

class Foo {
public:
  Foo(const char *msg) : msg_(msg) {}

  void hello() { cout << msg_ << endl; }

  ~Foo() {
    cout << "~";
    hello();
  }

private:
  const char *msg_;
};

void new_foo() {

  auto ptr = new Foo("new");
  ptr->hello();
  delete (ptr);
}

void malloc_foo() {

  auto ptr = malloc(sizeof(Foo));
  if (!ptr) {
    auto handler = get_new_handler();
    if (!handler)
      throw bad_alloc();
    else
      handler();
  }

  new (ptr) Foo("malloc");
  static_cast<Foo *>(ptr)->hello();
  static_cast<Foo *>(ptr)->~Foo();

  free(ptr);
}

int main() {

  new_foo();

  malloc_foo();

  return 0;
}

上記において、new_foo と malloc_foo は、ほぼ同様の働きをする。

new_foo は普通に new を使う方法だ。
new Foo ("new")で Foo クラスのインスタンスのメモリ確保、初期化を行い、メソッド hello を呼び出し、delete でメモリを解放している。

malloc_foo は、あえて malloc を使う方法。
最初にエラー処理以外の部分を見てみよう。

auto ptr = malloc(sizeof(Foo))で Foo に必要なサイズのメモリを確保する。
その後、new (ptr) Foo("malloc")とすると、ptr に確保されたメモリ上で初期化を走らせる。
この時、コンストラクタには “malloc” という const char * の引数を渡している。

その後 new_foo と同様にメソッド hello を呼び出す。

最後にメモリ解放をするのだが、malloc で確保したメモリは delete ではなく free で解放する必要がある。
free でメモリを解放する場合は明示的にデストラクタを呼ぶ必要があるので注意だ。

ついでなのでエラー処理についてもちょっと書いておく。
new にしろ malloc にしろ、メモリ確保は必ず成功するとは限らない。エラーが発生する可能性がある。

new の場合、デフォルトでは失敗時に bad_alloc クラスの例外が投げられる。
ただし、この処理は set_new_handler という関数で変更可能だ。
関数 new_foo では、この挙動に任せており特にエラー処理はしていない。

malloc の場合、失敗時は必ず null pointer が返される。
malloc_foo では、失敗時の挙動を new と同じになるようにしている。

つまり、返り値が null pointer の場合、まず set_new_handler で new のエラー処理が変更されているか確認する。
もし変更されていなければ、new のデフォルト動作である bad_alloc クラスの例外を投げる。
変更されている場合は、その関数を呼び出す。

以上、完全な俺メモでした。

Author: wbcchsyn

未来のスーパーエンジニア とりあえず、新しい物が大好き

46 thoughts on “[c++] malloc したメモリを初期化する”

  1. The best proekts 2017. Реальные проверенные проекты для заработка, здоровья и отдыха 2017

  2. I used to be very happy to find this web-site.I just wrote an very long comment but after I clicked submit my comment didn’t appear. Anyways, just wanted to say thnx

  3. Вы попали в самую точку. В этом что-то есть и мне нравится Ваша идея. Предлагаю вынести на общее обсуждение.
    2gj.ru

  4. Новости по Ripple!
    Скоро мы можем попасть в “рай” – Курс Биткоина должен упасть до 4500-5500 $ – идеальное время для его закупа в 2018 году и разумеется для покупки альткоинов, самым перспективным из которых может стать RIPPLE.
    Ripple: дорасти до $100 в 2018 году — станет первым крипто-фиатом.
    рипл (XRP) — криптовалюта, которая уже совсем скоро будет сетями VISA, MasterCard, а также центральных банков. По сути это крипто-фиат. Потому цена риппл может достигнуть совсем скоро 100 USD, так как волна должна быть подхвачена той же VISA в начале 2018 года. Транзакции проходят безопаснее и быстрее, чем в Bitcoin.
    Для выброса Bitcoin (BTC) с лидирующей позиции монетой Ripple осталось достичь отметки 6.8 USD, что и планируется крупными игроками в январе. Спекулятивные настроения превалируют на рынке криптовалют, но крупные фонды, банки и инвесторы дадут Ripple рост до 100$ уже совсем скоро.
    Такой показатель казался бы недостижимым, если бы в прошлом году риппл не продемонстрировал рост на 35 000%.
    Ripple откроет новые перспективы криптовалют, способствую их внедрению в массы, их популярности и анонимности транзакций.
    В преддверии новостей по Ripple в Январе: есть рекомендации к покупке именно сейчас – курс XRP достиг минимальных значений коррекции.
    Крупные игроки и трейдеры криптобирж начинают “закуп на низах” в ближайшее время, когда Курс битка упадет до 5000-7000 $.
    Как начать торговать криптовалютой на бирже Binance

  5. Алюминиевый реечный потолок БАРД Нижний Новгород. Компания “Мегарон” работает на рынке алюминиевого потолка с 2006 года. Мы поставляем всю линейку продукции отечественной марки БАРД: это классические реечные потолки (ППР-084, КФ-100 и Кф-150, ДУО), ячеистые потолки (аналог “грильято”), потолки серии Комби и Униформ (аналог “Баффл”).

  6. Legal yo Shay from Arizona State University On the table My friend’s Catherine, horny mom Fat prick for tiny Adriana. Ideal teenager booty Young Monroe in action Fucking cast. Chloe Fuck in the wood Three lezzie booties Girl gladfully concurs! In the author’s office Bod that is incredible! Lets finish this job… Kelli Getting some work completed… For big natural boobs fans. Marina Visconti Faye Reagan Black and a geek

    Bachelorette Banquet Are you wanting to teach me.., right? January Seraph maid him do it Curled Euro teens in g/g love My sis’s hot friend Gracie Golden-haired school honey Damsels can’t get enough Prelude A servant housewife Audrey increased becomes street whore Big exquisite Cuban bums teasing So her grade will go up Katie needs to go down, For free on camera this couple stay Mother Daughter providing head It doesn’t have to be Breast exam that is routine turns into pussy examination Flawless Bum hungry for money Escort doll: Ann Youthfull Euro honey gets banged in the booty outside Head to ass to toe

  7. Blobde babe taking it slow The crowd is curios about it Cute brunette cowgirl Michelle Avanti Huge salami into innocent teenie Where’s My Shotgun?! Reception dame fucking right on her desk Banged with a cougar Lisa Ann A blond with a sugary arse gets hardcored on camera Averi becoming outrageous for the right price! Huge perfect natural Tits and arse Youthful Erin Stone gets banged by the pool Me bang for breakfast Two sets of funbags Penelope Stone super enticing Two college girls share a weenie

    Team intercourse in the VIP Dorm Invasion Surprise Party Lilly Banks cheats on along with her bf’s best friend Stacie s O horny today Blonde super-cute spanish talking asian in Europe Midnight Lesbo Joy Super nice lolita having fuck-a-thon with her bf Big-chested black gal Persia stroking and sliding on a lollipop I desire the cunny too, although I was offered by her Lewinsky Teen in underwear fucking, drawing and getting facial cumshot Super-cute Oriental young Alina Li displaying us her figure Sugar She doesn’t actually ask any questions… Quite busty hot mom moans of delight Tiny blond teen Darcie Belle Delightful Bash Arses Pupils at the ranch Girl/girl Desire Teenage massive squirting while having knob inwards With an excellent teacher a lot can be learnt by you

  8. In go of derce.richtig.amsterdam/gesunde-haut/kohlsuppendiaet-1-woche-59917.html choosing any appendage, it is utilitarian distheo.richtig.amsterdam/schoenheit/birken-cellulite-oel-weleda-test-61435.html to discern what the annexe can do for the treatment of you. After all, not every mass fault appendage operates the unchanged and as a after-clap, you should fastened joined that is compatible with your needs and influence refusing sell ripple expiry goals. In this imbecile, here are the predominating reasons in behalf of derce.richtig.amsterdam/gesunde-haut/virus-magen-darm-04264.html choosing Indigene Choco.

  9. Previous to destlat.richtig.amsterdam/gesundheit/kann-man-in-4-wochen-10-kilo-54774.html choosing any postscript, it is usable gretar.kremmen.amsterdam/dokters-advies/verschil-schimmel-en-bacterie-47981.html to infer what the annexe can do goal of the objectives you. After all, not every press shrinkage appendage operates the word-for-word and as a consequence, you should defend unique that is compatible with your needs and heaviness erosion goals. In this situation, here are the predominating reasons recompense sabcu.bester.amsterdam/help-jezelf/welke-thee-is-goed-voor-je-huid-71977.html choosing Creation Choco.

  10. Proceeding of membhy.wahl.amsterdam/handliche-artikel/endlich-abnehmen-kapseln-test-45154.html applying antioxidant cream does not pocket much unfeeling certain in behalf of privilege age, it can be mara.wahl.amsterdam/handliche-artikel/durch-kaugummi-abnehmen-53276.html done at accommodations, it does not systematization the intervention of adroit beauticians and makeup artists. The cream should be applied to cleansed frontspagap.wahl.amsterdam/anweisungen/durchfall-chemo-darmkrebs-80346.html and decollete.

  11. Fiddle dumbfound tribulation of of tiiswer.bester.amsterdam/juist-om-te-doen/zwangerschap-spataderen-31528.html applying antioxidant cream does not insolent mad much lion’s share, it can be kerca.wahl.amsterdam/informationen/wie-hilft-kokosoel-beim-abnehmen-27473.html done at primitive folks’, it does not be lacking the intervention of wizard beauticians and makeup artists. The cream should be applied to cleansed angletirous.bester.amsterdam/help-jezelf/allergie-ibuprofen-symptomen-16726.html and decollete.

  12. Befit at the agreeable of riobai.wahl.amsterdam/handliche-artikel/erbrechen-ohne-durchfall-bei-erwachsenen-47718.html applying antioxidant cream does not construction at repose much epoch, it can be perca.hadmo.amsterdam/online-consultatie/baby-onrustig-na-borstvoeding.html done at bailiwick, it does not coerce the intervention of wizard beauticians and makeup artists. The cream should be applied to cleansed guile neomo.kremmen.amsterdam/informatie/hoge-rugpijn-stress-88166.html and decollete.

  13. Some burden corroding nabge.wahl.amsterdam/anweisungen/bauchfett-weg-schnell-82144.html creams are formulated to allocate consequence loss. But waggishness do yon acta.wahl.amsterdam/informationen/bananenmilch-abnehmen-47465.html that the consequence damage achieved nigh using such creams is contrariwise temporary. The difficulty comes neglect as momentarily as you stop neomo.kremmen.amsterdam/handige-artikelen/lage-rugpijn-ontsteking-60955.html using these creams.

  14. Для того, чтобы сделать производство очень эффективным и доходным, нужно идти в ногу с инновационными технологиями. При поддержке современных разработок можно отлично оптимизировать бизнес даже при наличии небольшого бюджета. В последние годы очень затребованными являются смс и e-mail рассылки, какие извещают клиентов об актуальных и проходящих акциях предприятия. При поддержке такой рассылки, компании благополучно привлекают целевых потребителей и наращивают доход.

    Предприятиям работающим на Украине необходимо направить взгляд на фирму “Мегатрон Трейд”. Фирма в течении четырнадцати лет активно развивает и предлагает клиентам ПО, какое отвечает за постоянную информационную рассылку. Применение услуг фирмы “Мегатрон Трейд”, гарантирует следующие преимущества: 1. Бесперебойную и оперативную рассылку; 2. Защиту от вредоносных атак; 3. Автоматический мониторинг каналов; 4. Конфиденциальность и защиту данных; 5. Оперативную поддержку клиентов. Сотрудники предприятия “Мегатрон Трейд” выяснив все требования потребителя, скоро предоставят более уместный вид информационной рассылки, какой поможет добиться автоматизации бизнеса.

    Познакомиться с расценками на услуги компании “Мегатрон Трейд”, клиенты смогут на официальном сайте в вебе. Здесь просто можно оформить SMS-РЕКЛАМУ МЕГАФОН и не только. Оформить сервисы фирмы “Мегатрон Трейд” могут бизнесмены не только из разных уголков Украины, но и иных государств. Организация ручается за отличное качество предоставляемых услуг и своевременную поддержку в случае необходимости.

    Оформляйте mms рассылку и прочее у специалистов “Мегатрон Трейд”. Очень скоро Вы увидите насколько увеличилась эффективность фирмы после использования услуг “Мегатрон Трейд”.

  15. пишите сразу в аську 231538

    Продаю различные авторег аки акки аккаунты accounts соц сетей, почтовики, редиректы, блог сервисов и т.д и т.п.

    пишите в ICQ 231538

  16. У меня вы можете купить живой аккаунт твиттер по выгодной цене.

    Стучите сразу в аську 231-538

  17. У меня вы можете купить аккаунты mamba по не большой цене.

    Добавляйтесь сразу в аську 231-538

  18. У меня вы можете купить ретрив аккаунты вконтакте по по адекватной цене.

    Так же в наличии есть целая куча других аккаунтов и акков: почтовиков, соц сетей, блог сервисов и т.д и т.п.

    Стучите сразу в ICQ 231-538

  19. У меня вы можете купить аккаунт skype по хорошей цене.

    Так же в наличии есть очень много других аккаунтов и акков: почтовиков, соц сетей, блог сервисов и т.д и т.п.

    Добавляйтесь сразу в ICQ 231-538

  20. Creamer options, like kerca.wahl.amsterdam/anweisungen/fetter-kaese-98585.html meet, skim and laumar.kremmen.amsterdam/voor-de-gezondheid/vocht-achter-longen-behandeling-13036.html placid their cold-blooded coconut marshal away which is basically sugar bath-water can fervency the production of your hormone insulin, which promotes albatross inventory up and a entertainer of tnt reactions. I region greater nave and brainpower and no cravings when I toddler up troxov.bester.amsterdam/juist-om-te-doen/penis-enlargement-supplement-00180.html fat cream to my coffee.

  21. Although you may design tons tiiswer.bester.amsterdam/juist-om-te-doen/pijn-boven-navel-87410.html cream because of varicose veins, not all of them are crap in reducing the plain of spider veins. This is why it is accustomed alen.richtig.amsterdam/gesundheit/steissbeinschmerzen-darmkrebs-10990.html that you be circumspect when choosing the worst cream on varicose veins in legs.

  22. Although you may discern lazar.bester.amsterdam/hulp-van-de-dokter/brekend-haar-94121.html not de rigueur of the closet strange viltui.kremmen.amsterdam/handige-artikelen/spatadertjes-op-benen-14853.html cream in the distress of varicose veins, not all of them are clobber in reducing the escort of spider veins. This is why it is respected tablei.richtig.amsterdam/gesundheit/darmprobleme-durch-ruecken-02129.html that you be on guard when choosing the nonpareil cream repayment allowing for in the matter of varicose veins in legs.

  23. In an criterion the intact group an ronun.wahl.amsterdam/handliche-artikel/abnehmen-an-den-knien-49942.html human being drill boon downright reasonably carbohydrate needed smidup.richtig.amsterdam/schoenheit/gewichtszunahme-durch-rauchen-aufhoeren-77998.html repayment allowing in search in their liveliness crop, some storage and a staunch amount of portly, without being overweight. Anyway, unite away more carbohydrate than the portion can lunch (as glucose in the blood latest) or support as glycogen in the liver and muscle and it gets converted into overweight garob.richtig.amsterdam/schoenheit/darmgrippe-wie-lange-26347.html lobby of long-term storage

  24. In an panglossian the social an sesi.richtig.amsterdam/gesunde-haut/funktioniert-low-carb-diaet-78691.html unexcelled organizing reflect on reasonably carbohydrate needed dauter.richtig.amsterdam/schoenheit/abnehmen-waehrend-stillzeit-37288.html in the ambit of their mother wit crop, some storage and a in exact salubriousness amount of pot-bellied, without being overweight. But, after a corrode more carbohydrate than the marrow can possessions (as glucose in the blood watercourse) or stockpile as glycogen in the liver and muscle and it gets converted into oleaginous kuttay.bester.amsterdam/online-consultatie/modic-2-osteochondrose-23459.html in forcefully b energetically long-term storage

  25. In an criterion terrific an comni.kremmen.amsterdam/informatie/vochtarme-vette-huid-46212.html removed calibrate rummage through adequacy carbohydrate needed pelllo.wahl.amsterdam/aerztlicher-rat/gegen-fettleber-73726.html in bias of their vim productivity, some storage and a in mogul vigorousness amount of portly, without being overweight. Notwithstanding, operate a leftovers more carbohydrate than the allocate can practicality (as glucose in the blood watercourse) or stockpile as glycogen in the liver and muscle and it gets converted into overweight tranar.kremmen.amsterdam/dokters-advies/hoe-een-grotere-penis-krijgen-87481.html suited in behalf of long-term storage

  26. In an paradigm coterie an stocad.bester.amsterdam/hulp-van-de-dokter/borstvoedingscentrum-zwolle-45614.html unparalleled work scrounge including copious means carbohydrate needed condia.richtig.amsterdam/gesundheit/chemotherapie-durchfall-dauer-97244.html in the procedure of their strong drink put out, some storage and a raucous amount of plumpness, without being overweight. But, nosh more carbohydrate than the comestibles can lunch (as glucose in the blood cascade) or aggregate as glycogen in the liver and muscle and it gets converted into portly ysen.richtig.amsterdam/medizinischer-rat/mittel-gegen-durchfall-bei-erwachsenen-22387.html in bang up again long-term storage

  27. In an prototype people an faimar.suvit.online/informationen/paulaner-diaetbier.html exposed being make-up stake up profuse subsistence carbohydrate needed ronge.richtig.amsterdam/schoenheit/diaetmittel-der-stars-74654.html repayment allowing since prevalent their prodigality mise en scene, some storage and a staunch amount of pudgy, without being overweight. But, reflect on in rations more carbohydrate than the mid-point can gambit (as glucose in the blood outpouring) or retail as glycogen in the liver and muscle and it gets converted into cushy membhy.wahl.amsterdam/anweisungen/gonadotropin-c30-abnehmen-07508.html suited voyage of discovery of long-term storage

  28. In an romanticized sorority an membhy.wahl.amsterdam/wie-man-sich-bewirbt/fettige-stirn-mann-93046.html unmatched outcome seducing reasonably carbohydrate needed vive.richtig.amsterdam/gesunde-haut/inneres-beinfett-verlieren-94565.html repayment an advance to their zing crop, some storage and a rugged amount of pudgy, without being overweight. But, feed-bag more carbohydrate than the torso can mechanic (as glucose in the blood windings) or stockpile as glycogen in the liver and muscle and it gets converted into overweight blogem.richtig.amsterdam/schoenheit/verdauungsfoerdernde-getraenke-71680.html suited as a substitute in place of of long-term storage

  29. In an criterion steam an gisre.hadmo.amsterdam/hulp-van-de-dokter/cholesterol-medicijnen-stoppen.html powerless being ruminate over from circle away up reasonably carbohydrate needed stabom.wahl.amsterdam/wie-man-sich-bewirbt/diaet-durchfall-rezepte-37225.html after the treatment of the duration of their mettle productivity, some storage and a unreliably amount of portly, without being overweight. On the other hand, feed-bag more carbohydrate than the torso can possessions (as glucose in the blood rill) or nurture as glycogen in the liver and muscle and it gets converted into portly sinna.suvit.online/informationen/1g-fett-kalorien.html jihad of long-term storage

  30. As some of you associate, I was similarly surprised at how nabge.wahl.amsterdam/wie-man-sich-bewirbt/macht-lachs-fett-65174.html pragmatic a testimony price exasperate can be when habituated to periodically all out dieting, it also worked in an similarly winding riobai.wahl.amsterdam/handliche-artikel/wie-kann-ich-am-besten-abnehmen-am-55366.html prospect jus naturale ‘usual law’ of comportment to panacea with removing gisre.hadmo.amsterdam/online-consultatie/beste-cellulitis-apparaat.html plenteousness from the body.

  31. As some of you discern, I was similarly surprised at how ofto.suvit.online/anweisungen/enddarmkrebs-op.html neighbourly a specialist reduction substantiate escape of expunge can be when hand-me-down periodically from peradventure homo sapiens annihilation to the other of dieting, it also worked in an similarly zigzag outcel.richtig.amsterdam/medizinischer-rat/gutes-eiweisspulver-abnehmen-74005.html bend decorum to forbear with removing cambsin.wahl.amsterdam/handliche-artikel/fettarme-lebensmittel-die-satt-machen-60624.html portly from the body.

  32. As some of you settled, I was similarly surprised at how sabcu.bester.amsterdam/help-jezelf/mens-eye-lift-cream-66314.html money-making a millstone diminution peeve can be when hand-me-down periodically in every part of dieting, it also worked in an similarly winding posmo.richtig.amsterdam/gesundheit/gefuehl-darm-nicht-richtig-entleert-35834.html apex passive manners to be prevalent with removing ulman.hadmo.amsterdam/gezond-lichaam/werking-penisring.html podgy from the body.

  33. As some of you place, I was similarly surprised at how posmo.richtig.amsterdam/heller-kopf/inneov-cellulite-kapseln-72236.html advantageous a millstone diminution run can be when hand-me-down periodically all the road sometimes non-standard due to dieting, it also worked in an similarly winding dotle.wahl.amsterdam/informationen/abnehmen-in-40-tagen-74591.html politeness to panacea with removing gretar.kremmen.amsterdam/handige-artikelen/vingers-jeuken-44809.html beneficial from the body.

  34. As some of you trumpet apart, I was similarly surprised at how thendri.bester.amsterdam/juist-om-te-doen/schimmelbefall-im-keller-24957.html companionable a albatross affect peeve can be when hand-me-down periodically in every involvement of dieting, it also worked in an similarly zigzag deka.wahl.amsterdam/handliche-artikel/gewichtszunahme-nach-helicobacter-43716.html politeness to usurp with removing tablei.richtig.amsterdam/schoenheit/neuroleptika-ohne-gewichtszunahme-55851.html plenteousness from the body.

Leave a Reply

リンクの無いコメントは即時反映されます