小编Mar*_*mes的帖子

为非指针模板类引发异常?

我有这个队列类,实际上,有几个遭受同样的问题 - 如果使用具有冗长拷贝ctor的类型编译,性能将会很差 - 队列在推/弹期间被锁定并且锁定的时间越长,争用的可能性更大.如果某个开发人员尝试使用10MB缓冲区类(而不是指向它的指针)编译它,那么该类将无法编译将是有用的.

似乎没有简单的方法将模板参数限制为基类或任何其他类型.

是否有一些我可以使用的bodge,以便如果参数不是指向类实例的指针,我的类将无法编译?

c++ templates

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

怎么了?四行代码中相同内容的三种不同类型?

我从另一个关于碎片化的问题中借用了这个,但我并不为此烦恼.我更担心的是我根本不理解这个功能.在类型和数据生命周期方面:(

相同的数据由std :: vector(具有内部元数据的动态aray类型),指向其中的字符串数据的指针(返回参数)和声明的返回类型(std:string)表示.

问题:当std :: vector将被销毁时,数据如何安全地从函数中移出?它被隐式复制了吗?向量中的char的动态数组是否已从向量'分离'并作为std :: string类型返回,因此不需要批量复制?有时,我认为C++和std库试图让我...

我已经使用C++了一段时间,但像这样的东西我的'ed in.

std::string TestFragmentation()
{
    std::vector<char> buffer(500);
    SomeCApiFunction( &buffer[0], buffer.size() ); // Sets buffer to null-terminated string data
    return &buffer[0];
}
Run Code Online (Sandbox Code Playgroud)

c++ std

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

尝试设置用户定义的消息处理程序时堆栈溢出(!)

我有这个C++ Builder 2009应用程序.这不是绝望 - 这是一个演示,但它驱使我去苏格兰威士忌.我现在充满了单一的麦芽,我不得不寻求帮助.

这个应用程序有一个主要形式和一些其他所有工作的东西.我没有理由认为它有任何问题.我添加了另一个表单'TfoPNGload',并添加了一些组件 - 没什么不寻常的.我把它从自动创建列表中取出,因此可以按需创建实例.

作为测试,我在主窗体上添加了一个SpeedButton,然后在单击中创建了一个'TfoPNGload'窗体的实例,并且Show()编辑了它:

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
  myPNGform=new TfoPNGload(NULL);
  myPNGform->Show();
}
Run Code Online (Sandbox Code Playgroud)

这也很好 - 我点击按钮,弹出一个表格.

一切正常.

我添加了一个消息处理程序,即使在发送任何消息之前,事情也变得异常.我添加了一个函数和宏的东西,使它成为一个消息处理程序:

class TfoPNGload : public TForm
{
__published:    // IDE-managed Components
    TImage *Image1;
    TPanel *Panel1;
    TSpeedButton *SpeedButton1;
    TTimer *tiSlideShow;
    TLabel *Label1;
    void __fastcall tiSlideShowTimer(TObject *Sender);
    void __fastcall FormCreate(TObject *Sender);
private:
    PNGload *myLoad;
    void __fastcall filesLoaded(TObject *Sender);
protected:
public:     // User declarations
    __fastcall TfoPNGload(TComponent* Owner);


    MESSAGE void __fastcall WMAPP(TMessage& msg);

    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_APP, TMessage, WMAPP)
    END_MESSAGE_MAP(TfoPNGload)

    vector<PNGtask*> *PNGresult;
    int vecSize; …
Run Code Online (Sandbox Code Playgroud)

c++ c++builder

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

指针有什么问题

我正在学习C语言的指针.我已经编写了一个简单的指针代码.我没有错误,但程序iz在执行过程中冻结.可能是什么原因?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h> 

void main()   
{
    int i;
    int *i2;
    i2 = &i;

    int z;
    int *z2;
    z2 = &z;   

    int b = 0;
    int *b2;
    b2 = &b;  

    char ch[250];
    //char *ch2;
    //ch2 = &ch;   

    printf("%s\n", " Enter line not longer than 250 characters");
    gets_s(ch); 

    for (*i2 = 0; *i2<10; i2++)
    {
        if (*i2>4)
        {
            *z2 = *i2;
            *b2++;
            break;
        }
    }
    printf("%d%c", *b2, ch[*z2]);
}
Run Code Online (Sandbox Code Playgroud)

c

-4
推荐指数
1
解决办法
70
查看次数

动态分配的shared_ptr可以通过它管理的对象的dtor自行删除吗?

在回答另一个问题时,我想到我可能优化了一些我自己的旧代码,这些代码错误地"生命周期管理不够理想".

我至少有一个app,其中一个对象的访问/生命周期由shared_ptr控制.这个ptr是动态分配的,因此它可以被"原子地"换出另一个*shared_ptr(并因此被新的ptr管理的更新对象),而不需要任何锁定.这似乎工作正常,但我故意泄漏旧的ptr,因为我不知道什么时候最后一个线程将完成它.

它现在发生在我身上,我可以(可能)删除()旧托管的旧对象中的旧*shared_ptr.我会在创建时将*sharedPtr加载到托管对象的私有数据成员中,以便dtor可以删除它.

有没有人这样做过,或者对它为什么不安全有任何看法?我可以尝试一下,但是我担心,就像许多多线程'优化'一样,它可能只是"看似有效",直到我交付它之后:(

c++ multithreading

-19
推荐指数
1
解决办法
604
查看次数

标签 统计

c++ ×4

c ×1

c++builder ×1

multithreading ×1

std ×1

templates ×1