「みんな教えて! 選手権!!」開催のお知らせ

sanae::str d="hello";
sanae::str t="";
t=d;
とやるとなぜかブレークポイントが発生します。
もう一つのパソコンではヒープ領域が壊れてしまったりしていて
よくわかりません。

sanae::strのコード(github):
https://github.com/ubproject/Useful-headers/blob …

ほかにもおかしなところを教えていただけると嬉しいです。
初心者なのでやさしめにお願いします、、、

A 回答 (1件)

まず「ブレークポイントが発生する」は意味不明な言葉だ. そもそも「ブレークポイント」は自分で設定するもの, 勝手に湧いて出てくるようなことは (本来の「ブレークポイント」の意味においては) ありえない.



で, 前
https://oshiete.goo.ne.jp/qa/12741697.html
で書いておいたんだよね, 「代入するだけでアウトとかなってないか?」って. たぶんだけど, そこに引掛ってる.

前のときは言及してなかったんだけど, コピー代入演算子のデフォルトもシャローコピーだから, 同じ事情で死ぬ可能性がある. つまりコピー代入演算子も定義しなきゃいけない.

あといくつか順不同にコメントしておこう.
・代入演算子 (複合代入演算子を含む) は「自分自身を (参照で) 返す」ように定義するのが一般的. operator << も同様.
・operator [] や operator char * は const 用とそうでないやつ用の 2種類定義しておこう (内容は同じだけど).
・比較演算子は bool を返してるんだから 0 や 1 じゃなく true, false を使うべき. あとクラス str を引数に持つものは const str & にすべきだ.
・calloc に渡す引数がおかしい. それから copystring も from の型が不自然. そのために, 本来不要なはずのキャストをしてる.
・input の引数 mode は, それ用の enum を定義すべきだろう. ただの enum にするか, enum class にするかはたぶん好みだけど.
・あ, sfree の引数がおかしい.
    • good
    • 0
この回答へのお礼

前回も教えていただきありがとうございます。
代入演算子などは修正しておきました。
このように修正しました。
https://github.com/ubproject/Useful-headers/blob …
こんな感じでいいでしょうか?
とらえ方が間違っていたらすいません

お礼日時:2022/01/10 11:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報