小编Ste*_*e H的帖子

将共享指针作为参数传递

如果我声明一个包装在共享指针中的对象:

std::shared_ptr<myClass> myClassObject(new myClass());
Run Code Online (Sandbox Code Playgroud)

然后我想将它作为参数传递给方法:

DoSomething(myClassObject);

//the called method
void DoSomething(std::shared_ptr<myClass> arg1)
{
   arg1->someField = 4;
}
Run Code Online (Sandbox Code Playgroud)

以上只是增加了shared_pt的引用计数,一切都很酷吗?还是留下一个悬垂的指针?

你还是应该这样做吗?:

DoSomething(myClassObject.Get());

void DoSomething(std::shared_ptr<myClass>* arg1)
{
   (*arg1)->someField = 4;
}
Run Code Online (Sandbox Code Playgroud)

我认为第二种方式可能更有效,因为它只需要复制1个地址(而不是整个智能指针),但第一种方式似乎更具可读性,我不期望推动性能限制.我只是想确保没有危险的东西.

谢谢.

c++ c++-faq shared-ptr c++11

82
推荐指数
3
解决办法
5万
查看次数

在同一解决方案中在C#项目和C++项目之间进行交互

我有一个用C++/cli编写的Windows窗体应用程序.我想用一些新的表单扩展这个应用程序,我想在一个单独的项目中用C#创建它们.

是否可以简单地将C#项目添加到具有C++项目的解决方案中,并且两者将进行交互?通过交互,我的意思是,例如,点击c#项目中编写的表单的按钮将能够调用c ++项目中的方法.或许以不同的方式询问,C#项目中的对象是否可以引用c ++项目中的对象?如果是这样,你知道一个示例代码让我开始吗?

谢谢.

.net c# c++-cli visual-studio-2010 visual-c++

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

在头中声明unique_Ptr变量的语法是什么,然后在构造函数中稍后赋值?

我编写了以下代码,对c ++来说很新,而且感觉很笨拙.我试图给'spriteBatch'(unique_Ptr)类范围.这是头文件:

    ref class CubeRenderer : public Direct3DBase
{
public:
    CubeRenderer();
    ~CubeRenderer();


private:

    std::unique_ptr<SpriteBatch> spriteBatch;

};
Run Code Online (Sandbox Code Playgroud)

然后在cpp文件构造函数中,这个:

std::unique_ptr<SpriteBatch> sb(new SpriteBatch(m_d3dContext.Get()));
spriteBatch = std::move(sb);
Run Code Online (Sandbox Code Playgroud)

它只是看起来笨拙的方式我必须创建'sb'并将其移动到'spriteBatch'.试图直接分配给'spriteBatch'失败(也许我只是不知道正确的语法).有没有办法避免需要使用'sb'和std :: move?

谢谢.

c++-cli unique-ptr

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

Visual Studio解决方案浏览器; 添加新过滤器与新文件夹

我来自ac #background并且正在学习VC++.在c#中我们只有"添加一个新文件夹"而没有"添加新过滤器"这样的东西.在VC++中,我们可以添加新文件夹或新过滤器.

过滤器的原因是什么?是否只是为了帮助稍后在组合项目时进行链接,因此您只需为每个文件夹添加一个"附加包含目录"而不是一个,同时保持您的解决方案资源管理器使用各种过滤器整洁?MS在解决方案资源管理器中创建过滤器概念的主要原因是什么?

什么是最佳实践(或共识),你喜欢将代码文件分成文件夹或过滤器吗?为什么?

visual-studio-2010 visual-studio visual-c++

5
推荐指数
0
解决办法
642
查看次数