引用持有的对象被提前析构了?

首页 论坛 有问必答 引用持有的对象被提前析构了?

该话题包含 5 个回复,有 3 个参与人,并且由  HatsuneMiku1 年, 11 月 前 最后一次更新。

正在查看 6 个帖子 - 1 至 6 (共计 6 条)
  • 作者
    帖子
  • #370

    jianpanlanyue
    参与者
    • 该话题由  jianpanlanyue 于 1 年, 11 月 前 修正。
    • 该话题由  qicosmos 于 1 年, 11 月 前 修正。
    • 该话题由  qicosmos 于 1 年, 11 月 前 修正。
    • 该话题由  qicosmos 于 1 年, 11 月 前 修正。
    #373

    jianpanlanyue
    参与者

    代码编辑器貌似有问题,请看下面:

    struct foo
    {
    foo(const std::string& str) :
    s(str){};

    const std::string& s;
    };

    int main()
    {
    foo ff(std::string(“0″) + “1”);
    //运行后,ff.s 值为空。 但ff.s作为引用,持有std::string(“0″) + “1”这个临时对象,在main作用域内,应该是不会被销毁,值为什么是空?
    return 0;
    }

    #377

    qicosmos
    管理员

    出了作用域就析构了。

    #378

    jianpanlanyue
    参与者

    @qicosmoc,f不是没出作用域么?

    #379

    jianpanlanyue
    参与者

    还是没理解到点子上。。

    struct foo
    {
    std::string const& s;
    };

    void fun(std::string const& str)
    {
    std::cout << str;
    }

    int main()
    {
    //s值是01,可以理解
    std::string const& s = std::string(“0″) + “1”;

    //f.s无值,不能理解,f不是没出作用域么?
    foo f={ std::string(“0″) + “1” } ;

    //结果是01,可以理解
    fun(std::string(“0″) + “1”);

    return 0;
    }

    #382

    HatsuneMiku
    参与者

    临时对象在执行完创建他的表达式之后就会被销毁

正在查看 6 个帖子 - 1 至 6 (共计 6 条)

抱歉,回复话题必需登录。

Copy Protected by Chetan's WP-Copyprotect.