小编Ric*_*lly的帖子

智能指针控制块内部机械

我想知道释放为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)
  1. 用虚拟分配的内存构建一个shared_ptr。分配了控制块,并将其虚拟指针设置为“虚拟”
  2. 从shared_ptr构建weak_ptr。两个智能指针共享相同的控制块地址。
  3. 共享指针被破坏。称为虚拟dtor(在“地标”之前打印“ dtor”)。控制块仍然有效,直到程序结束。

我对这些评论正确吗?
在这些步骤中,控制块内会发生什么(详细)?

编辑:make_shared情况会怎样?
有一种分配包含Dummy对象和控制块。
这是否涉及使用两个不同objets的新放置?
还是包含原始对象的结构?

#include <memory>
#include <iostream>

struct Dummy …
Run Code Online (Sandbox Code Playgroud)

c++ shared-ptr weak-ptr c++11

3
推荐指数
2
解决办法
1425
查看次数

Qt发射需要30ms,这可能吗?

我正在努力提高项目的性能,所以我想弄清楚哪个操作需要时间.

我注意到我的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)

c++ performance qt

3
推荐指数
1
解决办法
239
查看次数

初始化C++线程并稍后运行

我假设这个问题很简单.我想首先将一个线程定义为一个类的成员变量,然后在另一个函数中启动该线程.

例如:

头文件:

#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)

虽然以上不起作用,但想法?

c++ multithreading c++11

1
推荐指数
1
解决办法
5117
查看次数

使用Dev-C++编译时出错

我正在尝试在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 ++的真正的菜鸟很抱歉,如果这对你们来说很明显.

c++ windows compiler-errors

1
推荐指数
1
解决办法
5814
查看次数

std :: unique是否会使向量迭代器失效?

对于此代码:

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++ algorithm iterator

1
推荐指数
1
解决办法
121
查看次数