小编Dum*_*ior的帖子

C++对象不能被std :: move?

我得到以下代码:( Code Live:C++ Shell)

class Worker
{
public:
  Worker (std::string name):_name (name) {};

  Worker (const Worker & worker):_name (worker._name)
  {  std::cout << _name << " got copied!" << std::endl; }

  Worker (Worker && other):_name (other._name)
  {  std::cout << _name << " got moved!" << std::endl;  }

  ~Worker ()
  {  std::cout << _name << " got destroyed!" << std::endl;  }

  void changeName(std::string name)
  {  this->_name = name;  }

private:
  std::string _name;
};

class Factory
{
public:
  Factory ()
  {  std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ move c++14

4
推荐指数
2
解决办法
252
查看次数

为什么在分段错误中通过B类中的方法初始化A类的指针?

我有以下代码:( 住在Coliru)

#include <iostream>

class ClassA{
    public:
    ClassA(int i) : m_int(i){};

    int m_int;
};

class Master{
    public:
    Master(){};

    ~Master(){
        delete m_classMain;
    }

    ClassA* m_classMain;

    template<typename T>
    void mem(T* t, int i){
        t = new T(i);  
    }

    void test() {
        mem(m_classMain,3);
    }

    int get_i() const{
        return m_classMain->m_int;
    }
};

int main()
{
    Master* master = new Master();
    master->test();

    std::cout << master->get_i() << std::endl;
    delete master;
}
Run Code Online (Sandbox Code Playgroud)

我想ClassA* m_classMain通过mem(T* t, int i)模板方法初始化对象.

出于某种原因,我只会遇到分段错误.我认为t = new T(i) …

c++ templates segmentation-fault

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

错误:为什么'void*'不是指针对象类型,即使指针设置为对象?

我有以下代码(住在Coliru):

// untouchable extern library .hpp  file

typedef union ExternLibraryUnion
{
    int a;
    float b;
}ExternLibraryUnion;

// my code

#include <iostream>

class Container{
    public:
    Container() : m_union(NULL) {};

    ~Container(){
        if(m_union){
            delete m_union;
        }
    }

    void init(){
        m_union = new ExternLibraryUnion();
    }

    ExternLibraryUnion* get_union(){
        return m_union;
    }

private:
    ExternLibraryUnion* m_union;
};


class Master{
    public:
    Master() : m_union(NULL) {
        m_container.init();    
    };

    ~Master(){
        if(m_union){
            delete static_cast<ExternLibraryUnion*>(m_union);
        }
    }

    void load(){

    }

    void set(int i){
        m_union = m_container.get_union();
        m_union->a = i;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ void-pointers unions

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