????いつもありがとうございます
##簡潔な質問
????次のコードは未定義動作やアクセス違反を起こさない(安全)かが知りたいです
cpp
1#include <iostream> 2#include <memory> 3 4struct A { 5 virtual ~A() = default; 6 virtual void hoge() = 0; 7}; 8 9struct B : A { 10 int b = 0; 11 void hoge() override { std::cout << b << std::endl; }; 12}; 13 14 15int main() { 16 17 std::unique_ptr<A> ptr = std::make_unique<B>(); 18 19 ptr->hoge(); 20} 21
##質問詳細(考えたこと)
:std::unique_ptr<A> ptr = std::make_unique<B>();
この段落でclass B
の親であるclass A
の情報しかptr
には載らないと考えているのですが、もしそうであれば関数hoge
で破棄されたメンバ変数b
のアドレスから数値を読み取ってきているので未定義動作を引き起こすのだろうかと思いました
しかし仮想関数が良い感じに何かやってくれているのではとも勘ぐってしまいます
##環境
visual studio2019
vc++ latest(c++20)
最適化off
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/16 00:41