小编Bjö*_*lex的帖子

内存管理&std :: allocator

在查看我的代码时,我看到我使用的一些"丑陋"结构,在一个类(称为"map")中我有一个包含"data"类的向量:

std::vector<PointerToHUGEClass> vector;
Run Code Online (Sandbox Code Playgroud)

其中PointerToHUGEClass就像名称所描述的那样.(尽管指向的对象也由map类拥有,并且在构造函数中使用"new"参数创建).这一切都很好(目前).但是我仍然觉得这更像是一种解决方法.

我使用"PointerToHUGEClass"而不仅仅是"HUGEClass" 的唯一原因是因为我想确保不从堆栈声明对象.然而,在我理解分配器之前,这是做的.现在我觉得分配器的任务或多或少是为了确保不从堆栈声明内存.

我的问题:

  • 假设分配器负责物品的内存管理,我是否正确?(并确保从堆栈/ freestore/heap /中声明它)
  • std :: allocator做什么? - 它是从堆栈还是从堆声明的?
  • (从上一个问题开始跟进):如果我将堆栈中声明的项目复制到数据结构中,它是否仍在堆中声明?

再次感谢,paul23

c++ memory-management stl

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

关于c ++中虚函数的问题

我是C++的初学者,这些天我正在研究虚函数.有些问题让我很困惑.

例如:

class A {
  public:
  virtual void f() {
      //do something; 
  }
}

class B: public A {
   public:
   virtual void f() {
//do something;
}
}
Run Code Online (Sandbox Code Playgroud)
  1. class A包含一个虚函数f(),并class B继承它.在里面class B,该函数f()也被声明为虚拟,所以这意味着f()class B重载f()class A?它是否允许继承的类B重载f()?抑或B定义一个新的虚拟功能,该功能从不同f()class A

  2. 虚函数提供了一种重载方法的方法.如果B继承A并且没有声明f()as virtual,那么可以C继承B重载的类f()并实现多态吗?

c++ polymorphism virtual

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

如何对命令行参数进行单元测试?

我正在尝试向Python提供命令行参数unittest并面临一些问题.我在互联网上搜索并找到了提供参数的方法

unittest.main(argv=[myArg])
Run Code Online (Sandbox Code Playgroud)

问题是这适用于单个命令行参数但对多个参数失败.

unittest.main(argv=[myArg1, myArg2, myArg3])
Run Code Online (Sandbox Code Playgroud)

以上呼叫失败,出现以下错误:

  File "/opt/python2.6.6/lib/python2.6/unittest.py", line 816, in __init__
    self.parseArgs(argv)
  File "/opt/python2.6.6/lib/python2.6/unittest.py", line 843, in parseArgs
    self.createTests()
  File "/opt/python2.6.6/lib/python2.6/unittest.py", line 849, in createTests
    self.module)
  File "/opt/python2.6.6/lib/python2.6/unittest.py", line 613, in 
    loadTestsFromNames suites = [self.loadTestsFromName(name, module) 
    for name in names]
  File "/opt/python2.6.6/lib/python2.6/unittest.py", line 584, in 
    loadTestsFromName parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute 'admin'
Run Code Online (Sandbox Code Playgroud)

深入研究并发现Python unittest将使用的所有内容argv视为要运行的测试用例.

请告诉我如果仍有办法为我的单元测试案例提供多个论据.我想覆盖一些硬编码值,如IP地址,测试用例标记等,并基本上从主测试脚本中运行此测试脚本.

提前致谢.

python unit-testing command-line-arguments

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

列表追加循环问题

如何修改此代码以生成3个列表,每个列表包含5个元素,而不是现在; 3个列表包含5/10/15个元素?

import random

y = []

def autoSolve():
    for i in range(5):
        z = random.randrange(1, 10)
        y.append(z)
    print(y, end="")

for i in range(3):
    print("number", i + 1,)
    autoSolve()
    print()
Run Code Online (Sandbox Code Playgroud)

python python-3.x

6
推荐指数
1
解决办法
3万
查看次数

C++使用命名空间语句

namespace MyNamespace
{
    static void foo1()
    {

    }
}

using namespace MyNamespace;

class MyClass
{
    void foo2()
    {
        ::foo1();
    }    
};
Run Code Online (Sandbox Code Playgroud)

范围解析操作::意味着在全局命名空间中使用方法.我们可以在这里使用::foo1().这意味着方法foo1()在全局命名空间中,对吗?

我的问题是,是否using namespace ANAMESPACE_NAME意味着我们将命名空间中的所有元素导入ANAMESPACE_NAME全局命名空间?

c++ namespaces

6
推荐指数
2
解决办法
1739
查看次数

Cython矢量操作

我该如何使用该remove功能<algorithm>?(或任何其他操作,我想用向量使用它,我试图cdef extern声明它,但我还没有模板功能,我认为)

c++ python algorithm vector cython

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

Tycho - 对Import-Package的"不满意的约束"

我刚刚开始使用第谷,我很早就被困住了.也许我误解了一些东西,所以为了以防万一,这就是我所期待的:我用OSGi风格定义我的捆绑需求(即在MANIFEST.MFvia中Import-Package),而Tycho不知何故在运行中使用那些信息而不是我需要重新定义所有在Maven风格(即我不必将依赖项放在pom.xml中).

所以,我在Eclipse中使用m2eclipse插件,m2eclipse-tycho add和PDE插件创建了一个简单的Maven项目,并将以下Tycho内容放入pom中:

<properties>
    <tycho-version>0.15.0</tycho-version>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>tycho-maven-plugin</artifactId>
            <version>${tycho-version}</version>
            <extensions>true</extensions>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

在一些古怪的配置错误中挣扎,最后得到一个基本上空的项目(即没有源代码),在Eclipse中没有给出任何错误或警告.然后我从另一个项目中复制了我的源代码,并且(正如预期的那样)由于缺少依赖性而得到了一堆编译器错误.第一个是来自org.jboss.netty.channel的AbstractChannel.我使用版本3.5.1.Final of Netty,所以我编辑了我的MANIFEST.MF以包括:

Import-Package: org.jboss.netty.channel;version="[3.5.1,4)"
Run Code Online (Sandbox Code Playgroud)

我当时期待Tycho以某种方式神奇地弄清楚我需要Netty,因此就好像我在我的Maven pom.xml中插入了类似下面的内容:

<dependency>
    <groupId>org.jboss.netty</groupId>
    <artifactId>netty</artifactId>
    <version>3.5.1.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

相反,所有发生的事情是我在Eclipse中有一个额外的错误,说:

Unsatisfied constraint: 'Import-Package: org.jboss.netty.channel;version="[3.5.1,4.0.0)"
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始.对Tycho应该做什么有一些根本的误解吗?或者我还需要设置其他东西,以便能够从Import-Package条目MANIFEST.MF<dependency>pom.xml条目进行"神奇"的翻译吗?或者是其他东西?

提前致谢.

osgi tycho maven

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

带有JAX-RS的OSGi Bundle RESTful服务无法启动

我正在为Glassfish AS编写捆绑的OSGi应用程序.我有与JAX-RS RESTful服务的捆绑,与泽西(我使用Vogella的turtorial)一起发布.我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

当我尝试自动包装时出现问题,例外:

SEVERE: WebModule[/spm]StandardWrapper.Throwable
com.sun.jersey.spi.service.ServiceConfigurationError: com.sun.jersey.spi.HeaderDelegateProvider: The class com.sun.jersey.core.impl.provider.header.LocaleProvider implementing provider interface com.sun.jersey.spi.HeaderDelegateProvider could not be instantiated: Cannot cast com.sun.jersey.core.impl.provider.header.LocaleProvider to com.sun.jersey.spi.HeaderDelegateProvider
    at com.sun.jersey.core.osgi.OsgiRegistry$OsgiServiceFinder$1.next(OsgiRegistry.java:149)
    at com.sun.jersey.core.spi.factory.AbstractRuntimeDelegate.<init>(AbstractRuntimeDelegate.java:76)
    at com.sun.jersey.server.impl.provider.RuntimeDelegateImpl.<init>(RuntimeDelegateImpl.java:54)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at java.lang.Class.newInstance0(Class.java:372)
    at java.lang.Class.newInstance(Class.java:325)
    at com.sun.jersey.core.osgi.OsgiRegistry.hookUp(OsgiRegistry.java:391)
    at com.sun.jersey.core.osgi.OsgiRegistry.getInstance(OsgiRegistry.java:119)
    at com.sun.jersey.core.reflection.ReflectionHelper.getOsgiRegistryInstance(ReflectionHelper.java:737)
    at com.sun.jersey.spi.scanning.AnnotationScannerListener$AnnotatedClassVisitor.getClassForName(AnnotationScannerListener.java:217)
    at com.sun.jersey.spi.scanning.AnnotationScannerListener$AnnotatedClassVisitor.visitEnd(AnnotationScannerListener.java:186) …
Run Code Online (Sandbox Code Playgroud)

osgi glassfish jersey java-ee

6
推荐指数
0
解决办法
2292
查看次数

C++对静态const积分类型有什么特殊规则?

我的印象是C++将相同的特殊规则应用于static const整数类型,无论是在命名空间范围内声明还是在类/结构/联合中声明.

现在我想我已经被不合规的编译器教给了Bad Things.

static const int A = 1;

struct s
{
    static const int A = 1;
};
Run Code Online (Sandbox Code Playgroud)

除了明显的范围差异,如何做As::A有所不同?

  • ......当他们的用法被替换为他们的字面值?
  • ......什么时候可以拿到它的地址?
  • ......当我需要单独定义它们时?

我特别好奇C++ 03.

c++ standards static const

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

在构造函数完成合法之前调用析构函数?

假设我有一个类,其构造函数生成一个删除对象的线程:

class foo {
public:
    foo() 
    : // initialize other data-members
    , t(std::bind(&foo::self_destruct, this)) 
    {}

private:
    // other data-members
    std::thread t;
    // no more data-members declared after this

    void self_destruct() { 
        // do some work, possibly involving other data-members
        delete this; 
    }
};
Run Code Online (Sandbox Code Playgroud)

这里的问题是析构函数可能在构造函数完成之前被调用.在这种情况下这是合法的吗?因为t声明(并因此初始化)最后,并且构造函数体中没有代码,并且我从不打算子类化这个类,我假设该对象在self_destruct被调用时已经完全初始化.这个假设是否正确?

我知道delete this;如果this在该语句之后没有使用该语句在成员函数中是合法的.但构造函数在几个方面都很特殊,所以我不确定这是否有效.

另外,如果它是非法的,我不知道如何解决它,其他产生线程的特殊初始化函数必须在构造对象后调用,我真的想避免.

PS:我正在寻找C++ 03的答案(我只限于这个项目的旧编译器).的std::thread只是为了说明,目的在本例中是.

c++ constructor destructor asynchronous

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