标签: copy-constructor

即使在声明了复制构造函数之后,QObject也会返回异常

我正在尝试为qt脚本编写示例代码.当我向QObjecy副本建设者宣布时,我认为我做的是正确的事情,我也冒昧宣布=运营商.但是这段代码一直在给我

'QObject::QObject' : cannot access private member declared in class 'QObject'
Run Code Online (Sandbox Code Playgroud)

错误.

我声明MyClass这是一个QObject如下.我知道这可以让人看到我在这里做什么.

标题:

#ifndef SCRIPT_CLASSES_H
#define SCRIPT_CLASSES_H
#include "QObject"
#include "QtScript/QScriptValue"
#include "QtScript/QScriptable"
#include "QtScript/QScriptClass"

class MyClass : public QObject
{
    Q_OBJECT
//    Q_PROPERTY( int _id WRITE setId READ id )
public :
    MyClass(QObject *aparent =0) ;
    ~MyClass();

//     bool operator =(MyClass obj);

public slots:
    void setId(int d);
    int id() const ;
//    bool MyClass::equals(const MyClass &other);
private :
    int _id; …
Run Code Online (Sandbox Code Playgroud)

qt copy-constructor qobject

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

当元素在类中不存在时,如何实现复制构造函数?

例如,您的构造函数可能如下所示:

myClass::myClass(Mesh &mesh) : baseClass(mesh) 
{
    pointer = new Thing(mesh);
}
Run Code Online (Sandbox Code Playgroud)

mesh没有保存在myClass中,也没有在baseClass中保存的网格的getter.这只是必须在基类中实现getter的情况吗?

例如,你不能这样做:

myClass::myClass(const myClass& original) : baseClass(mesh) //there is no mesh
{
    pointer = new Thing(mesh); //mesh is no longer in the parameter list
} 
Run Code Online (Sandbox Code Playgroud)

编译器在为这些类创建默认复制构造函数时如何制作此副本?或者这是一个需要复制构造函数的情况?网格不是大脑的私人成员,并且没有吸气剂,所以我们如何制作新的东西?

编辑 - 通过添加更新问题 Thing

c++ copy-constructor

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

传递参数,列表和复制构造函数c ++

我的考试得到了这个问题

在传递参数中,在函数调用期间,复制参数=>调用每个参数的复制构造函数.假设将List作为参数传递,则复制列表的所有元素.如果它是对列表的引用,则仅复制列表的地址.你对这些陈述有什么看法?

我的回答是"如果它是对列表的引用,不仅复制了地址而且复制了值",我得到5分中的5分.我的回答错了吗?对我来说,这就是我得到的.上述陈述是否正确?

c++ list parameter-passing copy-constructor

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

为什么RVO不能与移动构造函数一起使用?

我正在尝试测试RVO右值参考.这是代码:

#include <iostream>

using namespace std;

class B{
public:
    int i;

    B(){
        i = 0;
        cout << "B() " << i << endl;
    }

    B(const B& b){
        i = 1;
        cout << "B(const B&) " << i << endl;
    }

    B(const B&& b){//if remove this constructor, then call B(const B& b)
        i = 2;
        cout << "B(const B&&) " << i << endl;
    }

    ~B(){
        cout << "~B() " << i << endl;
    }
};

B …
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor rvo

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

了解复制构造函数

我已经读过,如果我们在类中有指针,那么我们需要实现自己的复制构造函数; 否则,两个类将指向同一个内存位置的指针,并且在其中一个类上调用delete会使另一个类也为空.我试图通过编写如下代码来模拟上述条件:

class A
{
    private:
        int *p;
    public:
        A()
        {
            p = new int(10);
        }

        ~A()
        {
            delete p;
            cout << "Calling destructor" << endl;
        }
};

int main(int argc, char **argv)
{
    A a;
    A aa = a;
}
Run Code Online (Sandbox Code Playgroud)

我期待抛出一些异常,因为我没有明确声明我的拷贝构造函数,我也在使用指针.但程序运行完美.任何人都可以建议修改,以便我能够理解在什么条件下会发生异常?

c++ copy-constructor

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

c ++动态分配指针所指向的类的副本

我有一个class1带有构造函数class1(int i)和复制构造函数的类class1(const class1& other).

实例class1是动态创建的,因为int在编译时不知道参数.

我的问题是我必须在生成器对象和使用者对象之间传递此指针:

void producer::produceAndSend(...) {
    class1 *c1 = generate(...); 
    consumerObj.set(c1);
}

class consumer {
    class1 *internalC;
    void set(class1 *c);
}

void consumer::set(class1 *c) {
    this->internalC = c; //This only copies the pointer, not the content
}
Run Code Online (Sandbox Code Playgroud)

我想存储指向的对象的副本,c1并且必须指向此副本internalC.我怎样才能做到这一点?

c++ copy copy-constructor

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

迭代器复制构造函数错误,非法作为右侧'.' 操作者

检查这个答案后,我似乎无法解决我的问题:

我目前有一个test_iterator结构,它将不同类型的迭代器标记包装到它上,允许我使用所有类型的迭代器测试函数.在为这个迭代器创建一个拷贝构造函数时,我遇到了问题.当前结构定义为

template <typename BaseIterator, typename IteratorTag>
struct test_iterator
  : boost::iterator_adaptor<
        test_iterator<BaseIterator, IteratorTag>,
        BaseIterator, boost::use_default, IteratorTag>
{
private:
    typedef boost::iterator_adaptor<
        test_iterator<BaseIterator, IteratorTag>,
        BaseIterator, boost::use_default, IteratorTag>
    base_type;

public:
    test_iterator() : base_type() {}
    test_iterator(BaseIterator base) : base_type(base) {};

    test_iterator(const test_iterator& cpy): 
        base_type(cpy.base_type) {};
};
Run Code Online (Sandbox Code Playgroud)

最后一个构造函数(复制构造函数)给了我麻烦,我似乎无法理解我做错了什么.我收到的确切错误是

error C2274: 'function-style cast' : illegal as right side of '.' operator
Run Code Online (Sandbox Code Playgroud)

这是这一行:

base_type(cpy.base_type) {};
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor c++11

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

为什么以下默认复制语法在C++中无效?

我写了一个简单的C++程序来测试C++中默认复制行为的概念.所以,我有一个示例类X,我创建了一个名为"var"的X类对象,然后我尝试使用"var"初始化另一个名为"defaultCopyObject"的对象,假设默认复制行为只是一个对象的成员副本到另一个.我已正确理解了这个概念,但我无法理解用于初始化的语法.

X defaultCopyObject{var};// this code snippet works perfectly fine

// this code snippet returns a compile time error
X defaultCopyObject;
defaultCopyObject{var};
Run Code Online (Sandbox Code Playgroud)

有人可以解释我为什么前一个声明有效而后一个无效?

c++ copy copy-constructor

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

已删除vs空副本构造函数

已删除的副本构造函数的示例:

class A
{
public:
    // empty copy constructor
    A(const A &) {}
}

class B
{
public:
    // deleted copy constructor
    A(const A&) = delete;
}
Run Code Online (Sandbox Code Playgroud)

他们是否在实践中做同样的事情(禁止复制对象)?为什么delete比这更好{}

c++ copy-constructor c++11

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

C++ 11复制作为成员的std :: unique_ptr的std :: vector

我有一个graph有成员的班级:

std::vector<std::unique_ptr<layer>> _layers;
Run Code Online (Sandbox Code Playgroud)

我理解其性质std::unique_ptr是不可复制的.我的graph::graph(const graph & rhs);拷贝构造函数产生编译错误,因为我的普通实现违反了本质std::unique_ptr.

graph::graph(const graph & rhs)
: _layers(rhs._layers) {}
Run Code Online (Sandbox Code Playgroud)

如果我这样做,std::move那么我将违反param 的常量rhs,这不是我想要的.我知道我可以制作深层副本(例如,为存储的每个对象创建新的唯一指针rhs._layers)但除了迭代每个项目rhs._layers并分配新的唯一指针之外,还有一些优雅的方法吗?

gcc/g ++是c ++ 11而不是c ++ 14

我目前的解决方案是深度复制对象并分配新指针:

graph::graph(const graph & rhs)
{
   for (const auto & ptr : rhs._layers)
       _layers.emplace_back(std::unique_ptr<layer>(new layer(*ptr)));
}
Run Code Online (Sandbox Code Playgroud)

vector copy-constructor unique-ptr c++11

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

标签 统计

copy-constructor ×10

c++ ×8

c++11 ×3

copy ×2

list ×1

parameter-passing ×1

qobject ×1

qt ×1

rvo ×1

unique-ptr ×1

vector ×1