小编Mis*_*ded的帖子

奇怪的"候选人希望在构造函数中提供1个参数,0提供"

我在C++中创建一个简单的线程服务器应用程序,事实是,我使用libconfig ++来解析我的配置文件.好吧,libconfig不支持多线程,因此我使用两个包装类来完成"支持".点是,其中一个失败:

class app_config {
    friend class app_config_lock;
public:
    app_config(char *file) :
        cfg(new libconfig::Config()),
        mutex(new boost::mutex())
    {
        cfg->readFile(file);
    }

private:
    boost::shared_ptr<libconfig::Config> cfg;
    boost::shared_ptr<boost::mutex> mutex;
};
Run Code Online (Sandbox Code Playgroud)

从我的main.cpp文件调用时失败可怕:

app_main::app_main(int c, char **v) : argc(c), argv(v) {
    // here need code to parse arguments and pass configuration file!.
    try {
        config = app_config("mscs.cfg");
    } catch (libconfig::ParseException &e) {
        cout << "Parse error at line " << e.getLine() << ": " << e.getError() << endl;
        throw;
    } catch (libconfig::FileIOException &e) {
        cout << "Configuration …
Run Code Online (Sandbox Code Playgroud)

c++ construction exception-handling member-variables function-try-block

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

什么时候物体足够重以避免复制?

好吧,我相信标题很简单.我已多次阅读过应该避免复制重物的事情,这似乎很合理(谁想成为记忆猪?).问题是,何时应将物体视为重物?有多少会员?

c++ memory

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

分配内存而不在C++中初始化它

我熟悉C++,而且我遇到了内存管理问题.在C中,每当我想为任意数量的元素保留内存时,无论何种类型,我都会调用malloc()然后手动初始化(通过循环),以我想要的任何值.使用C++ new,一切都是自动初始化的.

问题是,我有一个BattlePoint类,它有点像这样:

class BattlePoint {
public:
    BattlePoint(int x, int y) : x(x), y(y) { };
    bool operator==(const BattlePoint &right);
    virtual ~BattlePoint();

private:
    int x, y;
};
Run Code Online (Sandbox Code Playgroud)

如您所见,它通过初始化程序获取一些x和y值,然后从中设置自己的x和y.问题是,这个函数将从一个函数中调用,该函数将分配它们的数组:

BattleShip::BattleShip(BattlePoint start, enum shipTypeSize size, enum shipOrientation orientation) : size(size), orientation(orientation) {
    points = new BattlePoint[size]; // Here be doubts.
}
Run Code Online (Sandbox Code Playgroud)

所以,我需要我的BattleShip的观点来保持一个BattlePoints数组,每个BattlePoints具有不同的初始值(例如0,1; 0,2; 0,3等).

问题是:我如何分配未初始化的内存?

朱利安

PS:我没有对工作方式做过任何测试new,我简单阅读维基百科关于它的文章说:

在C++编程语言中,以及在许多基于C++的语言中,new是一种语言结构,它在堆上动态分配内存并使用构造函数初始化内存.除了名为"placement new"的表单之外,新尝试在堆上为新数据分配足够的内存.如果成功,它会初始化内存并将地址返回给新分配和初始化的内存.但是,如果new无法在堆上分配内存,则会抛出std :: bad_alloc类型的异常.这消除了显式检查分配结果的需要.调用delete的调用必须在每次调用new时调用析构函数并将new分配的内存返回给堆,以避免内存泄漏.

placement new应该是解决方案,但它没有提到如何做到这一点.

PS 2:我知道这可以通过stdlib的vector类来完成,但是我故意避免使用它.

c++ memory new-operator

3
推荐指数
2
解决办法
2828
查看次数

MVC模型,它们用于什么?

现在是时候了解MVC了,所以这就是我想要做的事情; 而且我无法获得模型应该做的事情.根据维基百科,一个模型:

该模型管理应用程序域的行为和数据,响应有关其状态的信息请求(通常来自视图),并响应指令以更改状态(通常来自控制器).在事件驱动的系统中,模型在信息发生变化时通知观察者(通常是视图),以便他们能够做出反应.

在CakePHP中,你应该以这种非常简单的方式建立一个模型:

<?php

class Posts extends AppModel {
    var $name = 'Posts';
}

?>
Run Code Online (Sandbox Code Playgroud)

所以,如果我想要,例如,我的数据库中的最后10个帖子,我会创建一个看起来像这样的控制器:

<?php

class PostsController {
    function retrieve_latest($number = 10) {
        $posts = $this->Users->find(array(
                'fields' => '*',
                'order' => 'posts.post_id DESC',
                'limit' => $number,
                'page' => '1',
                'conditions' => array('posts.post_display == 1')
        ));

        $this->set('posts', $posts);
    }
}

?>
Run Code Online (Sandbox Code Playgroud)

而这个人会传递一个调用posts我视图的变量,然后相应地渲染它.问题是,我的模型不应该做任何其他事情吗?因为如果它简单,那么自定义模型就没有意义了,我的意思是,它只是模型类的空扩展.

php cakephp cakephp-model

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