我想知道释放为shared_ptr和weak_ptr共享的内部控制块分配的内存的确切条件是什么。
我猜控制块包含一个shared_ptr计数器和一个weak_ptr计数器。
#include <memory>
#include <iostream>
struct Dummy
{
Dummy() { std::cout << "ctor" << std::endl; }
~Dummy() { std::cout << "dtor" << std::endl; }
};
int main()
{
auto dummy = new Dummy();
auto wp = std::weak_ptr<Dummy>(); // pointing to nothing
{
auto sp = std::shared_ptr<Dummy>(dummy); // 1
wp = sp; // 2
} // 3
std::cout << "Land mark" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我对这些评论正确吗?
在这些步骤中,控制块内会发生什么(详细)?
编辑:make_shared情况会怎样?
有一种分配包含Dummy对象和控制块。
这是否涉及使用两个不同objets的新放置?
还是包含原始对象的结构?
#include <memory>
#include <iostream>
struct Dummy …Run Code Online (Sandbox Code Playgroud) 我正在努力提高项目的性能,所以我想弄清楚哪个操作需要时间.
我注意到我的emit功能需要30ms,是否可以发送数据?
这是代码:
void MainWindow::play(){
unsigned char* img; //Size is 1280*720*2
img = camera1->captureLastFrame();
timer.start();
emit video(img);
qDebug()<<QString::number(timer.nsecsElapsed()/1000000) + " ms";
}
Run Code Online (Sandbox Code Playgroud)
该qDebug显示器30毫秒.我做错了什么,或者这个操作真的需要时间吗?
编辑:
信号和插槽声明/连接.
signals:
void video(unsigned char* copy);
private slots:
void play();
connect(this, SIGNAL(video(unsigned char*)), ui->widget, SLOT(videodisplay(unsigned char*)));
Run Code Online (Sandbox Code Playgroud) 我假设这个问题很简单.我想首先将一个线程定义为一个类的成员变量,然后在另一个函数中启动该线程.
例如:
头文件:
#include<thread>
class Foo{
public:
void threaded_method();
void start_thread();
private:
std::thread m_thread;
};
Run Code Online (Sandbox Code Playgroud)
Cpp文件:
void Foo::start_thread(){
m_thread = std::thread(threaded_method);
}
Run Code Online (Sandbox Code Playgroud)
虽然以上不起作用,但想法?
我正在尝试在WinXP机器上使用Dev-C++编译以下代码:
#include <windows.h>
int APIENTRY _tWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow
)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息;
C:\ crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crt0_c.c未定义引用`WinMain @ 16'
我已经搜索了错误消息,但我不明白什么是错的.
提前致谢.
PS:我是c ++的真正的菜鸟很抱歉,如果这对你们来说很明显.
对于此代码:
std::vector<int> v = {...};
std::sort(v.begin(), v.end());
// Does this work?
std::size_t unique_count = std::unique(v.begin(), v.end()) - v.cbegin();
Run Code Online (Sandbox Code Playgroud)
在最后一行中,我认为既然std::unique只是在向量内部移动东西并且不向其中插入任何内容,则不应使迭代器无效,因此我计算的方式unique_count应该是正确的.但我想确保是这样的.是吗?
c++ ×5
c++11 ×2
algorithm ×1
iterator ×1
performance ×1
qt ×1
shared-ptr ×1
weak-ptr ×1
windows ×1