我已经根据此处发布的命中构建了一个单例类。
我用一个getMessage()函数扩展了它,该函数将检索内部字典消息 - 字典只需要在整个应用程序上加载一次,这就是单例的原因。
我的代码:
单例.hpp
class Singleton {
public:
static Singleton& getInstance();
std::string getMessage(std::string code);
private:
Singleton() {};
Singleton(Singleton const&) = delete;
void operator=(Singleton const&) = delete;
};
Run Code Online (Sandbox Code Playgroud)
单例.cpp
Singleton& Singleton::getInstance()
{
static Singleton instance;
return instance;
}
std::string Singleton::getMessage(std::string code)
{
/// Do something
return "Code example.";
}
Run Code Online (Sandbox Code Playgroud)
和主要代码:
主程序
int main()
{
Singleton* my_singleton;
my_singleton = Singleton::getInstance(); **<-- ERROR HERE**
cout << my_singleton->getMessage("a"); << endl
}
Run Code Online (Sandbox Code Playgroud)
主要是给我一个错误: Cannot convert 'Singleton' to 'Singleton*' in …
我试过像这样制作一个extjs全局变量类:
Ext.define('ccc.global.GlobalVariables', {
singleton: true,
username: 'hi user',
password: '',
clientID: '',
token: ''
});
Run Code Online (Sandbox Code Playgroud)
然后在控制器中我尝试更改变量,如下所示:
ccc.global.GlobalVariables.username = loginData.username;
Run Code Online (Sandbox Code Playgroud)
现在我试图在不同的模型代理中访问这些变量,并且它不断返回原始值'hi user'.
proxy: {
type: 'ajax',
extraParams: {
'username': ccc.global.GlobalVariables.username
},
Run Code Online (Sandbox Code Playgroud)
有谁看到我做错了什么?
我有两节课
public class Singleton<T> : MonoBehaviour where T : Component
{
protected static T _instance;
public static T Instance
{
get
{
return _instance;
}
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class GameManager : Singleton<GameManager>
{
// Lots of Methods and Properties...
}
Run Code Online (Sandbox Code Playgroud)
我想创建3.从GameManager派生的类,例如ShooterGameManager.我可以创建ShooterGameManager
public class ShooterGameManager : GameManager
{}
Run Code Online (Sandbox Code Playgroud)
但是实例仍然是GameManager !!!,我尝试过用类通用类添加额外的类定义.
public class GameManager<T> : Singleton<T> where T : Component
{}
Run Code Online (Sandbox Code Playgroud)
但是这次有两个完全不同的类可用,没有从GameManager继承.我该怎么办 ???
我试图创建一个类对象的单个实例,以便通过包含标头和调用方法的适当形式,使这个实例可以访问任何其他需要它的类getInstance().我试图通过遵循此处显示的Singleton示例来实现此目的,但由于某种原因,这个单个实例在创建后就会被销毁.
下面是头文件的副本, Window.h
#pragma once
#include <string>
#include <SDL.h>
class Window {
public:
static Window* getInstance();
static Window* getInstance(const std::string &title, int width, int height);
private:
Window(const std::string &title, int width, int height);
~Window();
bool init();
std::string _title;
int _width = 800;
int _height = 600;
SDL_Window *_window = nullptr;
static Window *_instance;
// static Window _solidInstance;
};
Run Code Online (Sandbox Code Playgroud)
下面是源文件,Window.cpp其中一些不相关的部分被删除以节省空间.
#include "Window.h"
#include <iostream>
Window* Window::instance = 0;
SDL_Renderer *Window::_renderer = nullptr;
Window::Window(const std::string &title, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在person类中编写单例模式,这使我能够为该类创建一个实例,并且我可以在我的程序中的任何位置使用它.
以下是班级:
// The declaration
class Person {
static unique_ptr<Person> instance;
Person() = default;
Person(Person&) = delete;
Person& operator=(const Person&) = delete;
~Person() = default;
public:
static unique_ptr<Person> getInstance();
};
// The implementation
unique_ptr<Person> instance = NULL;
unique_ptr<Person> Person::getInstance() {
if (instance == NULL) {
instance = unique_ptr<Person>(new Person());
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
但它给我这个错误的问题: Error C2280 'std::unique_ptr<Person,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function
不幸的是,我不明白这个问题,我不知道如何解决?
考虑下面一段代码,它基本上是迈耶单身人士的一个例子(希望如此)
static const std::string& foo() // Line 1
{
static std::string str("foo");
return str;
}
Run Code Online (Sandbox Code Playgroud)
第1行中提到的静态关键字是否无意义?如果是这样的话?
我正在编写一个线程安全的单例类,如下所示.以下实现确保只创建了一个类的实例.我的用例是我在多线程环境中使用此实例,其中每个线程可以getInstance()使用该实例调用并执行一些工作.我的问题是如何确保在特定时间只有一个线程正在使用该实例,以防止在多个线程同时尝试使用单个实例时可能发生的竞争条件.
class Singleton {
Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
static Singleton& getInstance() {
static Singleton s;
return s;
}
};
Run Code Online (Sandbox Code Playgroud) 我试图了解在Java 8中,控制器中的嵌套静态类(单例类)是否也是静态的,并且可以在请求之间共享?
这是我正在清理的旧代码,因为可能存在争用条件:控制器具有多个私有字段。每当请求到达控制器时,我便将它们移到静态嵌套类并创建该类的实例。然后,我将该对象传递给私有方法进行计算。
有人告诉我,单例中的静态嵌套类在内存中仅具有该子类的一个实例,如果遇到2个请求,则第二个实例仍然存在。还被警告说有人可以将这个静态类移到外面,这不是采取(?)的好方法
关于静态类和单例之间的区别,有很多答案。在Oracle文档上已经发现:实际上,静态嵌套类在行为上是顶级类,为了包装方便,该顶级类已嵌套在另一个顶级类中。
===但是我还没有发现有关静态嵌套类的任何信息===
我尝试了一下:在handleRequest中暂停一个线程,然后启动第二个线程,发现静态嵌套类的实例不同并且包含不同的值。给定文档,这就是我所期望的,但是我不确定,因为我找不到关于静态嵌套类WITHIN SINGLETON的任何信息。
我想念什么吗?这有可能会失败吗?有更好的解决方案吗?
public class MyController extends WebContentGenerator implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
{
ReportParameters params = new ReportParameters();
initVars(request, params);
doWork(params);
return null;
}
private void initVars(HttpServletRequest request, ReportParameters params)
{
params.flag = "Y".equals(request.getParameter("flag"));
params.message = "Hello world";
}
private void doWork(ReportParameters params)
{
if (params.flag)
params.message = "foo";
}
private static class ReportParameters
{
private boolean flag;
private String message;
}
}
Run Code Online (Sandbox Code Playgroud) 我希望这是一个连贯的问题...我有一个单例类定义,例如:
#include A.h
class Singleton
{
public:
// If I change this to a return by pointer, it works fine. But reference gives me problems.
static Singleton &getInstance();
Singleton(Singleton const&) = delete;
void operator=(Singleton const&) = delete;
~Singleton();
friend void A::friendMethodinA();
private:
Singleton();
void methodOnlyNeededByA();
}
Run Code Online (Sandbox Code Playgroud)
类的定义是:
Singleton &Singleton::getInstance()
{
static Singleton instance;
return instance;
}
Singleton::~Singleton() {}
Singleton::Singleton() {}
void Singleton::methodOnlyNeededByA() { // method body. }
Run Code Online (Sandbox Code Playgroud)
我的A类声明是:
#pragma once
class Singleton;
class A
{
public:
void friendMethodinA();
private:
// …Run Code Online (Sandbox Code Playgroud) 下面的示例来自Akka的Hello World项目,可从此处给出的说明下载。
示例代码在AkkaQuickstart.scala文件中。Greeter和Printer类以及具有相同名称的对象都在com.example包下的同一文件中。
在Greeter类中,有两个import语句:
import Greeter._
import Printer._
Run Code Online (Sandbox Code Playgroud)
当所有这些对象都定义在同一包中的同一文件中时,为什么需要在Greeter类中导入Greeter和Printer?它们是必需的,因为如果删除了这些导入,则代码将无法编译。
此处有关导入的Scala文档规定如下:
“导入子句用于访问其他程序包中的成员(类,特征,函数等)。不需要访问子句来访问同一程序包的成员。” 但是在下面的代码中,即使所有类和对象都在同一包中,也需要导入。为什么需要导入?
同样,对于Printer类,有以下导入语句:
import Printer._
Run Code Online (Sandbox Code Playgroud)
对此主题的任何指导将不胜感激。
完整的示例代码如下:
//#full-example
package com.example
import akka.actor.{ Actor, ActorLogging, ActorRef, ActorSystem, Props }
//#greeter-companion
//#greeter-messages
object Greeter {
//#greeter-messages
def props(message: String, printerActor: ActorRef): Props = Props(new
Greeter(message, printerActor))
//#greeter-messages
final case class WhoToGreet(who: String)
case object Greet
}
//#greeter-messages
//#greeter-companion
//#greeter-actor
class Greeter(message: String, printerActor: ActorRef) extends Actor {
import Greeter._ //*why is import required here?*
import Printer._ //*why is import …Run Code Online (Sandbox Code Playgroud)