这种引用的用法不正确吗
is this use of references incorrect?
我有以下代码:
std::vector<A>& Get() { return some_object; };
for(int i=0; i<Get().size(); ++i) {
x->push_back(Get()[i]);
}
但当我第一次调用size()时,我得到了垃圾值。我想在某个地方删除了一些临时的,但我真的不确定。。。有人能告诉我发生了什么事吗?
edit:我的some_object
是一个静态向量,所以在这个例子中它从未被删除
我建议替换for循环。我不相信循环。虫子爬进来的地方太多了。
std::vector<A>& v = Get();
x.insert(x.end(), v.begin(), v.end());
只有两种可能性——引用不好,或者对象本身不好。
由于引用是一个静态向量,所以引用不可能是坏的。静态对象不会消失。
这就留下了对象本身。是否有可能在初始化静态对象之前调用函数?如果从另一个静态对象的构造函数调用它,则可能会发生这种情况。
如果您的for循环是在全局或静态对象的构造函数的上下文中执行的,那么您将遇到一个称为静态初始化顺序惨败(SIOF)的问题。简而言之,SIOF意味着我们不能依赖于静态对象的构造顺序。
为了解决这个问题,您可以在首次使用习语时使用构造。使用这个习惯用法,您可以在第一次需要静态/全局对象时惰性地构建它们。这样可以确保在访问彼此依赖的静态对象时创建它们。
举个例子,你可以这样做:
std::vector<A>& Get()
{
// 'instance' will be constructed "on demand" the first time this
// function is called.
static std::vector<A> instance;
return instance;
};
这个技巧也用于实现Singleton设计模式。
注意:如果你的程序是多线程的,你必须使用这个技巧的变体。
只有当some_object
的生存期仅限于Get
的主体时,这是不正确的。
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 正弦级数方程计算不正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 密码登录程序将永远循环并显示不正确的结果
- 当C++中需要自动删除时,这是静态的正确用法吗?
- 在C++中返回不正确的楼层函数值
- 形状对象的旋转和缩放不正确C++
- C++ 读取文件读取文件不正确
- 关于类的 Python 文档 - 对C++的引用不正确
- 特征 LLT 模块给出不正确的结果?
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 如果语句逻辑不正确
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- 不正确的操作数类型 MSVC
- 数组填充了不正确的值
- 我是否不正确地集中了这些字符数组?
- 为什么除非我使用 cout,否则我的值不正确?
- 计算幂级数的数学结果不正确
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- 这种引用的用法不正确吗