这样的签名有效的用例是什么?:
T&& foo();
Run Code Online (Sandbox Code Playgroud)
还是右值引用仅打算用作参数?
如何使用这样的功能?
T&& t = foo(); // is this a thing? And when would t get destructed?
Run Code Online (Sandbox Code Playgroud) 我不记得是哪一次谈话,但最近我看了一些来自CppCon 2017的演讲,并且有人提到了某种旁注,唯一真正的重载方式是以operator=下列方式:
class test {
public:
test& operator=(const test&) &;
};
Run Code Online (Sandbox Code Playgroud)
他明确强调了尾随&但没有说明它做了什么.
那它是做什么的?
我有一个具有 GUI 成员变量的类。我必须在构建时提供文本、字体和大小。不幸的是,所属类的构造函数无法获取提供的数据,而是必须从工厂获取它(尤其是字体)。
class Element {
public:
Element();
/* other stuff */
private:
UIElement uie;
};
Element::Element() /* cannot construct the object here */ {
/* ... some aquiring ... */
new (&uie) UIElement(/* now I have the required data */);
}
Run Code Online (Sandbox Code Playgroud)
这是一个有效的实施吗?我可以简单地将对象放入类的构造已经分配的空间中吗Element?
覆盖时因“双重释放或损坏”而崩溃unique_ptr
我正在开发日历应用程序。我正在使用 SFML,它有一个类sf::Drawable.
我有一个班级DayView : public sf::Drawable和一个班级WeekView : public sf::Drawable。这两个类是显示日历内容的具体实现。一日一周。
在类中CalendarScene,我希望有一个指向当前实现的指针,我只需单击即可替换该指针。
所以我将它们放入一个unique_ptr<sf::Drawable> displayImpl在覆盖时自动删除它们的位置。
现在我分配displayImpl = unique_ptr<WeekView>(new WeekView(...))
如果我现在按下按钮重新分配displayImpl = unique_ptr<DayView>(new DayView(...))应用程序会在 ( virtual) 析构函数中崩溃WeekView并显示消息*** Error in
'/home/XXX/workspaces/CDT/XXX/Debug/XXX': double free or corruption (out): 0x0000000000f9ed60 ***
我shared_ptr<vector<shared_ptr<Calendar::Entry>>>在这两个*View班级中也有一名成员。不知道这个有没有作用。
我的问题出在哪里?
/*
* CalendarScene.h
*
* Created on: 17. Nov. 2016
* Author: martin
*/
#ifndef SCENES_CALENDARSCENE_H_
#define SCENES_CALENDARSCENE_H_
#include …Run Code Online (Sandbox Code Playgroud)