[英]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.