复制构造函数 在构造函数中调用的构造函数

copy constructor called in the constructor

提问人:Fabio 提问时间:7/7/2022 最后编辑:user17732522Fabio 更新时间:7/7/2022 访问量:54

问:

如果我有课程:

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

C++ C++11 复制构造函数

评论

1赞 user17732522 7/7/2022
您还希望如何构造新对象?另外,请不要在任何地方使用指针。这几乎从来都不是必需的,应该避免。请参阅 C++ 核心指南。我不知道为什么,根本就是指针,应该是指针,也可能不应该是指针。new Connection(c)newprioritycountdatastd::stringconnection
0赞 Remy Lebeau 7/7/2022
制作 a 的副本而不仅仅是指向原件有意义吗?RequestConnectionConnection

答:

0赞 MSalters 7/7/2022 #1

new Connection(c)获取现有 Connection ,复制它,并为您提供指向该副本的原始非托管指针。初始化指针仅设置指针,不涉及复制构造函数。cRequest::c

但是看看评论 - 这个类可能有太多的指针。如果是具有虚拟方法的基类,则可以考虑使用智能指针,例如 ,但可能应该是普通成员。Connectionstd::unique_ptr<Connection>Request::cConnection