套接字读取()进入一个函数,在 C++ 中 returns 指针

Socket read()ing into a function that returns pointer in C++

我有一个叫 message 的 class。在这里你可以找到相关的代码:

class message
{
    private:
        HeaderType header;
        // Message text
        byte * text;    

    public:
        ~message();
        byte * getText();
...};

/*
 * Destructor
 */
message::~message(){
    if (header.ack == false) free (text);
}

/*
 * getText
 *
 * Returns pointer to text
 */
byte * message::getText(){
    return text;
}

我需要直接读入 text。因此,我创建了上面的函数 message::getText(),其中 returns 指向文本的指针。然后,我读入了这个函数。我知道,这是错误的。谁能告诉我为什么?

read(receive_socket,m.getText(), header.dataSize);

谁负责维护这些数据?我看到 free(应该是 delete[]),但我在任何地方都看不到 new。你只是返回一个未初始化的指针吗?

这是 vector 的一个很好的用例:

class message
{
private:
    HeaderType header;
    // Message text
    std::vector<char> text;  
};

std::vector<char>& message::getText() { return text; }

如果你只是将套接字描述符传递到你的 message 中会更好一些,这样它就可以完成你的 read:

int read(int sd) {
    text.resize(header.dataSize);
    return ::read(sd, &text[0], header.dataSize);
}