簡體   English   中英

構造函數中調用的復制構造函數

[英]copy constructor called in the constructor

如果我有課程:

#include <cstddef>
#include "connection.h"
class Request{
private:
    size_t sz;
    char *data;
    Connection *connection;
public:
    Request(const char* d, size_t s, const Connection &c);
    Request& operator=(const Request &other);
    Request(const Request &rhs);
    ~Request();
    void print();
    void setElement(size_t, char);
};
#include <cstddef>
#ifndef CONNECTION_HPP
#define CONNECTION_HPP
class Connection {
private:
    size_t *priority;
    size_t *count;
public:
    Connection(size_t p): priority(new size_t(p)), count(new size_t(1)) {};
    Connection(const Connection&);
    Connection& operator=(const Connection&);
    ~Connection();
    size_t getPriority();
    void setPriority(size_t); };
#endif

我提供類請求的構造函數:

Request::Request(const char* d, size_t s, const Connection& c): 
sz(s), data(new char[s]),connection(new Connection(c)) {
    for (size_t i = 0; i<s; ++i)
        data[i] = d[i]; }

當有connection(new Connection(c))時,我正在使用類連接的復制構造函數,但我不明白為什么。 復制構造函數是由new Connection(c)還是由connection(*)調用的?

new Connection(c)采用現有的 Connection c ,復制它,並為您提供指向該副本的原始非托管指針。 初始化指針Request::c只設置一個指針,不涉及拷貝構造函數。

但是請看評論——這個類可能有太多的指針。 如果Connection是具有虛方法的基類,則可以考慮使用類似std::unique_ptr<Connection>的智能指針,但可能Request::c應該是普通的Connection成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM