小编Ign*_*ant的帖子

如何在Phalcon中创建新的注射服务

我正在尝试为基于Phalcon的webapp构建一个基本的"JSON getter",类似于:

function getJson($url, $assoc=false)
{
$curl = curl_init($url);
$json = curl_exec($curl);
curl_close($curl);
return json_decode($json, $assoc);
}
Run Code Online (Sandbox Code Playgroud)

当然,我想将这些东西全球化,可能作为注射服务.什么是最好的方法呢?我应该实施Phalcon\DI\Injectable吗?然后,我如何包含新课程并将其提供给DI?

谢谢!

php dependency-injection phalcon

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

如何将动态分配的数据从对象移动到另一个对象?

我有一个用RAII编写的Array类(为了这个例子的目的,超简化):

struct Array
{
    Array(int size) {
        m_size = size;
        m_data = new int[m_size];
    }

    ~Array() {
        delete[] m_data;
    }

    int* m_data = nullptr;
    int  m_size = 0;
};
Run Code Online (Sandbox Code Playgroud)

然后我有一个函数,它接受一个数组的引用并对它进行一些操作.我使用临时数组temp来执行处理,因为有几个原因我不能直接使用引用.完成后,我想将数据从临时数据传输到真实数据:

void function(Array& array)
{
    Array temp(array.m_size * 2);

    // do heavy processing on `temp`...

    array.m_size = temp.m_size;
    array.m_data = temp.m_data;
}
Run Code Online (Sandbox Code Playgroud)

显而易见的问题是temp在函数末尾超出范围:它的析构函数被触发,而后者又删除了内存.这种方式array将包含不存在的数据.

那么将数据所有权从一个对象"移动"到另一个对象的最佳方法是什么?

c++ memory temporary move-semantics c++11

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

为什么用虚拟析构函数调度std :: vector :: push_back段错误?

我有以下课程:

class Thing
{
public:

  Thing() {};
  virtual ~Thing() {}
};


class MyOwnThing : public Thing
{
public:

  std::vector<int> m;

  MyOwnThing() {};

  void init()
  {
    m.push_back(0);
    m.push_back(0);
    m.push_back(0);
    m.push_back(0);
    m.push_back(0);
    m.push_back(0);
    m.push_back(0);
    m.push_back(0);
    m.push_back(0);
    m.push_back(0);
    m.push_back(0);
    puts("done");
  }
};
Run Code Online (Sandbox Code Playgroud)

到目前为止没有什么不寻常的,除了基类中的虚拟析构函数.现在,这就是我在main函数中所做的:

int main()
{
  MyOwnThing *t = (MyOwnThing *) new Thing(); // (1)
  t->init();
  delete t;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在第二次调用时生成了一个很好的段错误push_back.如果我从中删除虚拟析构函数,一切都会顺利运行Thing.怎么了?

1)我怀疑这个演员可能是问题的根源.

c++ oop

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

如何在模板类中返回成员变量的副本?

模板新手在这里。我正在玩以下测试课程:

template<typename T>
class Container
{
public:

    Container(T t) : m_t(t) {}

    T clone()
    {
        return m_t;
    }

private:

    T m_t;
};
Run Code Online (Sandbox Code Playgroud)

clone()方法返回成员变量的副本。显然,如果T是一个指针,这将无法正常工作,例如:

Container<SomeClass*> container(new SomeClass());
Run Code Online (Sandbox Code Playgroud)

clone()方法只会返回一个指针,而不是完整的克隆。我知道if constexprC ++ 14编译器的优点,但是很不幸。我想让我的类通用,以便它也可以与指针一起使用。我应该创建两种不同的方法吗?SFINAE可以帮上什么忙吗?

c++ templates c++14

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