c++ - 如何使指针的取消引用保留对该对象的引用?

标签 c++

当我取消引用一个指针并分配给它时,它会更改指针指向的内容,它不会为它指向的内容调用 operator=。我做了这个程序来证明这一点:

#include <iostream>

struct S
{
    void operator =(int)
    { x = 5; }

    operator int*()
    {
        return &x;
    }

    int x;
};

std::ostream& operator <<(std::ostream& out, S const& s)
{
    return out << s.x;
}

int main()
{
    S s;
    int *x = s;
    *x = 10;

    std::cout << *x;
}

这会打印 10。执行 *x = 10 不会修改 x 指向的对象。我怎样才能让它这样做? (欢迎使用 C++11 解决方案)

最佳答案

您的代码是未定义的行为。 int *x = S();x 初始化为一个临时地址,它在完整表达式的末尾被销毁,所以 *x 是非法的。

关于c++ - 如何使指针的取消引用保留对该对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907834/

相关文章:

c++ - 用于获取 URL 之类的简单 C++(或 c)库

c++ - 将自身存储在模板类中的 std::vector

使用黎曼和的 C++ 集成解决方案 : Loses validity for greater than 10 partitions

c++ - 最佳实践 : QT4 QList<Mything*>. .. 在堆上,或 QList<Mything> 使用引用?

c++ - 关于使用读写在文件中存储结构

c++ - 为自定义类重载 std::find

c++ - 可以让范围 View 拥有一个包含它需要的状态的shared_ptr吗?

c++ - 如何在方法中传递智能指针而不删除它

c++ - 无法使用 Visual Studio 启动 DirectX 11 可执行文件,构建工作正常

c++ - 我如何转发声明一个类并稍后在 C++ 中使用它的成员函数?