- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码运行良好,但据我所知,它不应该
#include <iostream>
#include <vector>
struct Data
{
explicit Data():value(1){}
int value;
};
struct Foo
{
explicit Foo(Data& data):data_(data){}
inline void print() const
{
std::cout<<data_.value<<std::endl;
}
Data& data_;
};
void addEntry(std::vector<Foo>& vec)
{
Data data;
Foo foo(data);
vec.push_back(foo);
}
int main()
{
std::vector<Foo> vec;
addEntry(vec);
vec[0].print();
}
addEnty
函数创建了一个名为data
的Data
实例。然后创建一个 Foo
的实例,称为 foo
,它存储对 data
的引用。然后将该距离复制到 vector vec
中。因此,当函数结束时,vec[0]
应该包含一个悬挂引用,因为 data
已被销毁。我对吗?所以我希望通过调用方法 print()
获得一些垃圾。是我偶然获得了正确的值 1 还是我遗漏了什么?
为了使其正确,我会 move 数据以避免悬空引用。所以我会修改构造函数
explicit Foo(Data&& data):data_(data){}
和函数
Foo foo(std::move(data));
通过这种方式,foo
及其在 vec[0]
中的拷贝包含实例 data
而不是对其的引用。我对吗?这是正确的解决方案吗?这样,Foo::data_
需要是Data
类型还是Data&
类型?
最佳答案
Yes Foo 将持有悬空引用。 Foo 类应该保存 Data 而不是 Data& 或 Data&&。
#include <iostream>
#include <vector>
struct Data
{
explicit Data():value(1){}
int value;
};
struct Foo
{
// this is needed if you want to pass lvalue
Foo(const Data& data):data_(data)
{}
// for rvalue
Foo(Data&& data):data_(std::move(data))
{}
void print() const
{
std::cout<<data_.value<<std::endl;
}
Data data_;
};
void addEntry(std::vector<Foo>& vec)
{
vec.emplace_back(Foo(Data()));
// or
Data data;
// do somth with data
vec.emplace_back(Foo(std::move(data)));
// or
Data data;
// do somth with data
Foo foo {std::move(data)};
// do somth with foo, but
// do not use data here!!!
vec.push_back(std::move(foo));
}
int main()
{
std::vector<Foo> vec;
addEntry(vec);
vec[0].print();
}
关于c++ - 左值与右值可疑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32119757/
继this q about GADTs之后,我正在尝试构建一个 EDSL(对于本文中的示例),但没有 GADT。我已经找到了一些可以避免 AST 数据类型加倍的方法;但相反,它似乎将代码加倍。所以我尝
我正在使用 compose 实现 MVI。为了让我遵循正确的事件循环,我需要通过我的 View 模型传播点击事件,然后观察副作用。我看过一些实现,它们都使用 LaunchedEffect(true)
有没有办法使用Python对日志文件中的“可疑时间”进行有效的二进制搜索? 我有一个日志文件,其条目如下: 02:38:18 0 RcvTxData - 11 : Telegram receive
一些黑客可以访问我的数据库,我将找出漏洞;我无权访问服务器日志。我制作了这段代码来保存文本文件中的可疑查询: function query($query) { $file = 'sqllog.txt'
问题背景: 日常对Sql Server 2005关系数据库进行操作时,有时对数据库(如:Sharepoint网站配置数据库名Sharepoint_Config)进行些不正常操作如数据库在读写时而无
1、出错情况 有些时候当你重启了数据库服务,会发现有些数据库变成了正在恢复、置疑、可疑等情况,这个时候DBA就会很紧张了,下面是一些在实践中得到证明的方法。 在一次重启数据
我在尝试解决这段短代码中的运行时段错误时遇到了麻烦。我怀疑这与代码中使用 system() 和 strcpy() 有关,但由于我没有遇到此类错误的经验,所以我不确定该怎么做,而且到目前为止我还没有找到
我正在尝试按照 NutchTutorial 运行基本爬网: bin/nutch crawl urls -dir crawl -depth 3 -topN 5 所以我已经安装了 Nutch,并使用 So
我注意到,当我通过浏览器打开 CSS 时,我看到我所有的图像都预先设置了一些 IP。它看起来像这样: url(http://64.19.142.11/www.mydomain.com/i/pgBg.p
我是一名优秀的程序员,十分优秀!