我最近了解了移动构造函数,但很多在线资源都没有讨论复制省略。复制省略对我来说也很有意义,但它让我想知道何时会在没有超级人为示例的情况下调用移动构造函数。
从一个流行的 SO 帖子向我解释了移动语义/sf/answers/217698701/
string b(x + y);
string c(some_function_returning_a_string());
Run Code Online (Sandbox Code Playgroud)
帖子说这两个都应该调用移动构造函数,因为它们接受临时变量。但是,这些实际上都没有调用移动构造函数(我已经测试过),相反,它们都只是执行复制省略,除非您通过显式编写std::move.
string b(std::move(x + y));
string c(std::move(some_function_returning_a_string()));
Run Code Online (Sandbox Code Playgroud)
或some_function_returning_a_string返回std::move(someString)。但你为什么要这样做?复制省略甚至比移动语义更高效。那么在什么情况下会调用移动构造函数而不是复制省略呢?
在你指出我这里之前,我觉得什么时候移动构造函数被调用?答案给出了人为的例子,或者他们中的一些人只是做了复制省略。我有兴趣学习在实践中何时调用移动构造函数。
我发现这个有用的链接https://jsfiddle.net/5rz5r9ag/12/它展示了如何使用常规图表 js 获取 onclick 事件。将其与 React Chart JS 一起使用的问题是,我无法像该示例中那样访问 myLineChart 对象,因为这不是在 React 中制作折线图的方式。相反,我的反应目前在渲染函数中看起来更像这样:
return (
<Line
data={this.state.chartData}
options={{
onClick: function(evt) {
var element = myLineChart.getElementAtEvent(evt);
if(element.length > 0)
{
var ind = element[0]._index;
if(confirm('Do you want to remove this point?')){
data.datasets[0].data.splice(ind, 1);
data.labels.splice(ind, 1);
myLineChart.update(data);
}
}
},
....
/>
);
Run Code Online (Sandbox Code Playgroud)
我无法像在 jsfiddle 中那样访问 myLineChart,因此无法弄清楚如何为我的折线图中的点创建 onClickevent。
这个问题来自我试图了解智能指针的动机,在该指针周围创建一个包装类,以便您可以添加自定义析构函数。指针(和整数、布尔值、双精度数等)没有析构函数吗?
我觉得我对__name__python中的环境变量有一个很好的了解。但是,当我__name__从__init__.py中打印出变量时,它会打印出其所在目录的名称(即软件包名称)。如何__name__在初始化文件中定义?
另外,每个python文件都有自己的局部__name__变量吗?因为它在文件之间不断变化...(也许我不太了解__name__,也没有想到)
编辑:我真的不认为这个问题与名称等于主要问题相同。我了解在大多数python文件中什么叫名字。我只是对init文件中的值感到困惑。
我完全理解内存的指针分配,但仅在更高级别上释放内存。我最好奇的是 C++ 如何跟踪哪些内存已经被释放?
int* ptr = new int;
cout << ptr;
delete ptr;
cout << ptr;
// still pointing to the same place however it knows you can't access it or delete it again
*ptr // BAD
delete ptr // BAD
Run Code Online (Sandbox Code Playgroud)
C++ 怎么知道我释放了那块内存。如果它只是将其转换为任意垃圾二进制数,那么当我取消引用指针时,我不会只是在读取该垃圾数吗?
相反,当然,c++ 知道这些是段错误。
c++ ×3
charts ×1
copy-elision ×1
destructor ×1
heap-memory ×1
init ×1
javascript ×1
pointers ×1
python ×1
reactjs ×1